MySQL 注入和字符转义
使用 MySQL API 中的 mysql_real_escape_string() 函数时,必须确保所有易受攻击的字符被转义以防止 SQL 注入。 MySQL 文档规定以下字符需要转义:
<pre class="brush:php;toolbar:false">0x00 : "\0", 0x08 : "\b", 0x09 : "\t", 0x1a : "\Z", 0x22 : '\"', 0x25 : "\%", 0x27 : "\'", 0x5c : "\\", 0x5f : "\_",\n \r \ ' " \Z
但是,将此列表与 ESAPI 的 Python 端口进行比较,发现需要转义的其他字符,包括:
SELECT a FROM b WHERE c = '...user input ...';
出现关于转义退格键 (b) 和制表符 (t) 字符的必要性。
解决查询
"\bDELETE_MY_DATABASE"
当用户输入包含制表符或退格键时字符,可能会带来安全风险。考虑这样一种场景,恶意行为者在用户输入末尾包含以下内容:
传递到数据库时,退格字符将删除前面的单引号,从而导致执行恶意 DELETE
ESAPI 安全库
由于潜在的安全问题,ESAPI 安全库合并了退格键和制表符以进行转义:
结论
因此,在处理 MySQL 查询中的用户输入时,建议谨慎并转义 ESAPI 安全库中指定的所有字符。虽然退格键和制表符等特定字符本身看起来并不危险,但它们与其他机制结合使用可能会造成重大安全威胁。
以上是为什么要在 MySQL 查询中转义退格键和制表符?的详细内容。更多信息请关注PHP中文网其他相关文章!