我正在创建一个网站,在那里你“发布”,表单内容被保存在一个MySql数据库中,并在加载页面后,被检索,类似于脸书。我构造了所有的帖子,并将原始html插入到一个模板中。问题是,在我测试时,我注意到我可以将javascript或其他HTML写入表单并提交,在重新加载时,html或JS将被视为源代码,而不是帖子。我认为一些简单的编码就可以解决这个问题,但是使用<form accept-charset="utf-8">是行不通的。有没有有效的方法来防止这种类型的安全漏洞?
发布于 2012-07-08 05:15:35
我找到了这篇文章,它谈到了python中的XSS预防。
发布于 2012-07-08 07:00:08
为了完整起见,我想提一下,在金字塔中有两个地方可以清理用户输入--在进入的过程中,在将数据保存到数据库之前,以及在离开的过程中,在模板中呈现数据之前。可以说,将HTML/JavaScript存储在数据库中没有什么问题,只要您确保模板中呈现的所有内容都被正确转义,它就不会影响您。
事实上,Chameleon和Mako模板引擎在默认情况下都开启了HTML转义,所以如果你只是“照常”使用它们,你永远不会得到用户输入的HTML注入到你的页面中-相反,它将被呈现为文本。如果没有这个功能,清理用户输入将是一项艰巨的任务,因为您需要检查用户输入数据的每个表单中的每个字段(即,不仅是“方便的”文本区域小部件,还包括其他所有内容-用户名、用户电子邮件等)。
因此,您一定是做了一些不寻常的事情(或者使用其他模板库)来使Pyramid以这种方式运行。如果您提供更多关于您正在使用的模板库的详细信息和代码示例,我们将能够找到以适当的方式修复它的方法。
发布于 2012-07-08 05:16:41
您所描述的攻击类型称为"Javascript注入攻击“或”跨站点脚本(XSS)攻击“。你可能会有更多的机会去寻找它。虽然最好的问题是probably here,但Sanitising user input using Python也是一个类似的问题,它包含了一些相当全面的答案
https://stackoverflow.com/questions/11378645
复制相似问题