我被告知使用(python的)cgi.escape()函数来避免sql注入和xss攻击,虽然我确信django会自动转义变量。阅读这些攻击,在我看来,分号的作用对于注入sql和javascript都至关重要。然而,cgi.escape似乎没有编码分号,让它裸露。虽然其他不那么不祥的角色被转换成html实体。
这是为什么?不会编码;变成类似≻方便地防止这两种常见和主要的攻击形式?
有趣的是,我一直无法找到用于分号的html实体。
答案 0 :(得分:3)
cgi.escape
用于将可能包含&
,<
和>
字符的文本转换为HTML实体,这些字符通常在HTML文档中不可见将显示。它与防止SQL注入没有任何关系,尽管它可以通过将HTML代码显示为文本而不是将实际HTML标记插入显示的页面来帮助防止XSS攻击。
您应该使用参数化查询来避免SQL注入;转义输入然后从中构建SQL很难看。
答案 1 :(得分:1)
将值放入SQL时,分号有时会出现问题,但在将值放入HTML时不会出现问题。
cgi.escape()
旨在转义正在放入HTML的内容,因此只能解决HTML中存在的问题。