IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:SQL Injection

共 2 篇相关文章

IT 累计浏览 2,535

解决 SQL 注入的另类方法

这篇讲的是如何从根本上破解 SQL 注入,而不只是修补漏洞。作者从一个经典场景出发:攻击者通过精心构造的输入,篡改了原本合法的 SQL 查询语义。文章指出,这种问题的根源在于我们过度依赖与 SQL 语法等价的、但更容易被误用的“字符串拼接”表示法。 核心思路是跳出“过滤或转义”的传统框架,转而利用 SQL 本身是公理化语言的特性。文章提出了三种另类的防御策略:第一,将 SQL 模板转换为语法严格、结构不同的等价表示,比如前缀表示法或欧拉表示法,让攻击者的注入在新语法下直接失效;第二,为 SQL 关键字替换一套自定义的、任意的 token 集合,构建一个“私有语言”,使注入的 `or`、`=` 等字符成为无效代码;第三,验证 SQL 语句的结构不变量,例如填充前后 token 的数量必须恒定,任何偏离都意味着注入发生。 作者通过具体的代码示例,生动地展示了攻击注入在这些策略下是如何因语法错误或结构破坏而“折戟”的。这种从语言理论和形式化角度解决问题的方案,为防御注入攻击提供了一条极具启发性的新路径。

IT 累计浏览 1,789

set_magic_quotes_runtime()和get_magic_quotes_runtime()

这篇讲的是PHP中两个与数据库交互紧密相关的函数:set_magic_quotes_runtime() 和 get_magic_quotes_runtime()。作者从它们对数据处理的实际影响出发,清晰地剖析了二者的核心区别——前者用于设置在PHP脚本执行期间,从数据库或其他外部数据源返回的字符串中的单引号、双引号等是否自动被转义;后者则用于查询当前这一转义行为的开关状态。 文章重点解释了“魔术引号运行时”这一特性的作用与潜在风险。虽然它旨在简化开发者对数据库返回数据的处理,避免SQL注入,但实际上它带来的不可预测性和对数据真实性的干扰,导致其设计思路饱受争议。作者通过具体的代码场景对比,说明了开启该特性后数据在不同环节可能发生的意外变化,以及为何在现代PHP开发中,这一特性已被彻底废弃。 对于仍在维护旧项目的开发者,文章指出了如何通过检查函数返回值来兼容历史代码。而对于新项目,作者明确建议应专注于使用预处理语句和参数绑定等更安全、更可控的方式来处理用户输入,彻底远离魔术引号带来的隐患。