安全地为JavaScript提供JSON和HTML

Tow*_*wer 4 html javascript php security ajax

我正在考虑向JavaScript提供HTML和JSON的安全方法.目前我只是输出JSON,如:

ajax.php?type=article&id=15
Run Code Online (Sandbox Code Playgroud)
{
 "name":    "something",
 "content": "some content"
}
Run Code Online (Sandbox Code Playgroud)

但我确实意识到这是一个安全风险 - 因为文章是由用户创建的.因此,有人可以为内容插入脚本标记(只是一个示例),并直接在AJAX API中链接到他的文章.因此,我现在想知道防止此类问题的最佳方法是什么.一种方法是从输入中编码所有非字母数字字符,然后在JavaScript中解码(并在放入某处时再次编码).

另一种选择可能是发送一些标题,迫使浏览器永远不会呈现AJAX API请求的响应(Content-TypeX-Content-Type-Options).

roo*_*ook 6

如果您设置为Content-Type,application/jsonNO浏览器将在该页面上执行JavaScript.这是RFC-4627的一部分,Google使用它来保护自己.其他Application/内容类型遵循类似的规则.

您仍然需要担心基于DOM的XSS,但这会是您的JavaScript的问题,而不是json的内容.Json的另一个更奇特的安全问题是像gmail中的漏洞一样的信息泄漏.

确保始终测试您的代码.有Sitewatch免费的xss扫描仪,或开源的Skipfish ,最后你可以用一个简单的手动测试<script>alert(/xss/)</script>.