分号在SQL注入和XSS攻击中的作用
有人告诉我应该使用(Python的)cgi.escape()函数来避免SQL注入和XSS攻击,尽管我知道Django会自动处理变量的转义。看了关于这些攻击的资料,我觉得分号在SQL注入和JavaScript攻击中扮演了重要角色。然而,cgi.escape似乎并没有对分号进行编码,反而让它保持原样。相比之下,其他一些不那么危险的字符却被转换成了HTML实体。
这是为什么呢?如果把分号编码成像≻这样的东西,不就能方便地防止这两种常见且严重的攻击吗?
有趣的是,我找不到分号的HTML实体。
2 个回答
1
在把值放入SQL时,分号有时会引发问题,但在放入HTML时就没这个烦恼。
cgi.escape()
是用来处理放入HTML的内容的,它只会处理那些在HTML中可能会出问题的东西。
3
cgi.escape
是用来把可能包含 &
、<
和 >
这些字符的文本转换成 HTML 实体的。这些字符在 HTML 文档中通常是看不见的,但转换后就能正常显示了。它和防止 SQL 注入没有任何关系,不过它可能有助于防止 XSS 攻击,因为它会把 HTML 代码当作文本显示,而不是直接插入实际的 HTML 标签到页面中。
为了避免 SQL 注入,最好还是使用参数化查询;把输入进行转义后再构建 SQL 语句是很麻烦的做法。