分号在SQL注入和XSS攻击中的作用

0 投票
2 回答
1620 浏览
提问于 2025-04-16 13:38

有人告诉我应该使用(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 语句是很麻烦的做法。

撰写回答