【问题标题】:Role of semi-colon in sql injection and xss attacks分号在sql注入和xss攻击中的作用
【发布时间】:2011-03-14 02:39:29
【问题描述】:
有人告诉我使用(python 的)cgi.escape() 函数来避免 sql 注入和 xss 攻击,尽管我确信 django 会自动转义变量。阅读此类攻击,在我看来,分号的作用对于注入 sql 和 javascript 都至关重要。然而, cgi.escape 似乎没有对分号进行编码,让它裸露在外。而其他不那么不祥的字符被转换为 html 实体。
这是为什么?不会编码;变成 ≻ 之类的东西方便地防止这两种常见和主要的攻击形式?
有趣的是,我一直找不到分号的 html 实体。
【问题讨论】:
标签:
python
escaping
sql-injection
xss
【解决方案1】:
cgi.escape 用于将可能包含&、< 和> 字符(通常在 HTML 文档中不可见)的文本转换为将显示的 HTML 实体。它与防止 SQL 注入没有任何关系,尽管它可能通过将 HTML 代码显示为文本而不是在显示的页面中插入实际的 HTML 标记来帮助防止 XSS 攻击。
无论如何,您都应该使用参数化查询来避免 SQL 注入;转义输入然后从中构建 SQL 是丑陋的。
【解决方案2】:
分号有时会在将值放入 SQL 时成为问题,但在将值放入 HTML 时则不会出现问题。
cgi.escape() 设计用于转义放入 HTML 中的内容,因此仅转义 HTML 中存在问题的内容。