我有一个编辑器,允许用户添加存储在数据库中并呈现在网页上的 HTML。由于这是不受信任的输入,我计划使用它Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment
来清理 HTML。
- 我应该在保存到数据库之前还是在将不受信任的输入呈现到网页之前进行消毒?
- 在我的项目中包含 AntiXSS 源代码而不仅仅是 DLL 是否有优势?(也许我可以自定义白名单?)
- 我应该在哪个类文件中查找 GetSafeHtmlFragment 的实际实现
我有一个编辑器,允许用户添加存储在数据库中并呈现在网页上的 HTML。由于这是不受信任的输入,我计划使用它Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment
来清理 HTML。
我不同意所选答案有两个原因
通常,您在输出点进行编码,并将来自数据存储的任何数据默认视为不受信任 - 毕竟,如果有人设法直接或通过 SQL 注入编辑您的数据库怎么办?
收听Jeff Williams 在 XSS 上的 OWASP 播客 67。他谈到了在存储之前不进行消毒或编码。主要原因是,如果(何时)库为响应新漏洞而发展,您的数据将被卡在旧版本中。当然,这不会阻止您在入口点针对白名单运行任何输入并拒绝任何超出可接受范围的内容。
AntiXss.GetSafeHtmlFragment()
)您可以在页面指令中使用参数ValidateRequest="true"。通过这种方式,所有的请求数据都得到验证,如果存在验证问题,您总是可以捕捉到错误。它还可以防止 sql 注入线程和其他不仅可能的 XSS。
对于数值数据,您可以使用 Int32.TryParse() 或任何其他 TryParse 系列(Byte.TryParse Int16.TryParse...)验证整数溢出或滥用数据类型
无需使用任何其他类或额外的消毒剂方法。