AJAX安全

AJAX安全

简介

本文档将为AJAX安全提供一个起点,希望后面可以根据特性的框架和技术进行合理地更新和扩展

客户端(JavaScript)

使用.innerText 而不是.innerHtml

.innerText通过编码向其传入的字符串,可以预防大部分的XSS问题。

不要使用eval

eval() 方法不可取,永远不要使用它。使用了它就代表着你的设计有问题。

将数据传递个消费者之前,先规范化(即:使用前先编码)

当使用数据构建HTML、脚本、CSS、XML和JSON等数据时,确保考虑到如何以字面意义呈现这些数据, 以保持其逻辑含义。

数据在使用之前应该确保合理地编码以方式注入等问题。

不要依赖客户端逻辑来确保安全

不要忘记用户控制着客户端的逻辑。他们可以通过一些浏览器插件来设置断点,跳过代码,修改值等。永远不要依赖客户端逻辑。

不要依赖客户端的业务逻辑

确保服务端实现了和客户端一样的业务逻辑或者规则,以免客户端逻辑被绕过并做出一些愚蠢、糟糕和昂贵的事情。

避免编写序列化代码

这很难,即使是一个小错误也会导致大的安全问题。已经有很多框架提供了这个功能。

避免动态构建XML或者JSON数据

就像构建HTML或者SQL会硬气XML注入漏洞一样,避免这种情况或者使用一个编码库或者安全的JSON或XML库来确保属性和元素数据安全。

不要向客户端发送机密数据

任何客户端知道的,用户也知道,因此,将机密的信息放在服务端比较好。

不要在客户端进行加密

使用TLS/SSL并且在服务端加密

不要在客户端执行影响安全的逻辑

服务端

使用CSRF保护措施

防止旧浏览器的JSON劫持

参考Angular JS的JSON劫持防御机制,参见JSON Vulnerability Protection

总是让外部原语成为JSON字符串的对象:

可以利用的

1
[{"object": "inside an array"}]

不可以利用的

1
{"object": "not inside an array"}

同样不可利用的

1
{"result": [{"object": "inside an array"}]}

避免写序列化的代码。记住引用类型和值类型的区别

使用一个经过检验的库

服务可以直接被用户调用

用户和AJAX客户端代码一样,可以调用服务端服务。确保服务端校验了输入数据。

避免手动凭借XML或者JSON数据,使用框架

使用安全的框架,不要手工拼接,这可能引起安全问题。

对WebServices使用XML和JSON模式

引用

https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/AJAX_Security_Cheat_Sheet.md

0%