AJAX 安全速查表¶
简介¶
本文档将为 AJAX 安全提供一个起点,并有望合理地频繁更新和扩展,以提供有关特定框架和技术的更详细信息。
客户端 (JavaScript)¶
使用 .innerText
而非 .innerHTML
¶
使用 .innerText
可以自动对文本进行编码,从而防止大多数 XSS 问题。
不要使用 eval()
、new Function()
或其他代码评估工具¶
eval()
函数是邪恶的,切勿使用。需要使用 eval() 通常表明您的设计存在问题。
在输出上下文中使用前对数据进行编码¶
当使用数据构建 HTML、脚本、CSS、XML、JSON 等时,请确保您考虑到这些数据必须以字面意义呈现的方式,以保持其逻辑含义。
数据应在此类使用前进行适当编码,以防止注入式问题,并确保保留逻辑含义。
不要依赖客户端逻辑进行安全处理¶
不要忘记用户控制客户端逻辑。有许多浏览器插件可用于设置断点、跳过代码、更改值等。绝不能依赖客户端逻辑进行安全处理。
不要依赖客户端业务逻辑¶
就像安全一样,确保所有重要的业务规则/逻辑都在服务端复制,以防用户绕过此逻辑,导致意外或代价高昂的行为。
避免编写序列化代码¶
这很难,即使一个小错误也可能导致重大的安全问题。已经有很多框架提供了此功能。
查看 JSON 页面以获取链接。
避免动态构建 XML 或 JSON¶
就像构建 HTML 或 SQL 一样,您会造成 XML 注入漏洞,因此请避免这种情况,或者至少使用编码库或安全的 JSON 或 XML 库来确保属性和元素数据的安全。
绝不将秘密传输给客户端¶
客户端知道的任何信息用户也会知道,因此请将所有秘密内容保留在服务端。
不要在客户端代码中执行加密¶
使用 TLS/SSL 并在服务端加密!
不要在客户端执行影响安全的逻辑¶
此原则可作为一种故障安全措施——如果安全决策不明确,默认在服务端执行。
服务端¶
使用 CSRF 保护¶
请查阅 跨站请求伪造 (CSRF) 预防 速查表。
防范针对旧版浏览器的 JSON 劫持¶
审查 AngularJS JSON 劫持防御机制¶
请参阅 AngularJS 文档中的 JSON 漏洞防护 部分。
始终返回外部包含对象的 JSON¶
JSON 字符串的外部基本类型始终应为对象
可被利用的
[{"object": "inside an array"}]
不可被利用的
{"object": "not inside an array"}
同样不可被利用的
{"result": [{"object": "inside an array"}]}
避免在服务端编写序列化代码¶
请记住引用类型与值类型!查找一个已审查过的现有库。
服务可被用户直接调用¶
即使您只期望您的 AJAX 客户端代码调用这些服务,恶意用户也可以直接调用它们。
确保您验证输入并将其视为用户控制下的内容(因为它们确实是!)。
避免手动构建 XML 或 JSON,请使用框架¶
使用框架会更安全,手动操作则会引入安全问题。
为 Web 服务使用 JSON 和 XML 模式¶
您需要使用第三方库来验证 Web 服务。