📅  最后修改于: 2023-12-03 14:39:04.199000             🧑  作者: Mango
AJAX (Asynchronous JavaScript and XML) 是一种在不重新加载整个页面的情况下发送和接收数据的技术。它的流行使得我们的Web应用程序更为交互,并且可以动态地加载内容。但是,安全问题一直存在,特别是在AJAX应用程序中。
攻击者可以通过一个恶意网站,让受害者在浏览器中发送一个请求到目标网站并完成一些恶意操作,而目标网站无法区分请求是从受害者还是攻击者发出的。 这种攻击称为 CSRF,也称为 “Session Riding”。
对 CSRF 的防御,可以使用额外的请求参数、验证码等方式。
XSS 攻击指的是在网页中注入恶意代码,使得攻击者可以控制网页、修改用户信息、窃取用户敏感信息等。假设,一个购物网站需要 Ajax 动态提交数据,在提交留言时,攻击者在留言中插入代码,当用户查看留言时,代码会在用户浏览器中执行。
对 XSS 的防御,可以使用浏览器内置的 Content Security Policy、对输入输出进行过滤等方式。
SQL 注入指的是攻击者利用网站没有严格过滤和校验用户输入,将有害代码注入到SQL语句中,以达到破坏、篡改网站数据的攻击手段, 由于AJAX是异步数据请求,不能直接用参数化查询来过滤注入。
对 SQL 注入的防御,可以使用预定义参数或更安全的ORM框架,来合理化处理用户输入数据。
在AJAX代码的编写过程中,源代码要做到高内聚,低耦合,将相近的功能组织在一起,通过定义不同的函数,提高代码的可读性,便于维护。
AJAX 对于数据交互的处理是在服务器端完成的,因此,在后台应根据前台进行相应的接口限制,如IP访问限制、接口限制等。
AJAX交互中,输入可以是任何形式,包括地址、cookie、参数等,输出也可以是文本、图片、文件等,因此,在数据传递前,必须根据数据类型和需求坚决过滤,对于HTML、JS、CSS等特殊字符,需要进行编码,对于文件、音视频等数据,需要进行数据合法性验证。
AJAX数据返回是有可能出现 XSS 攻击,对于JS脚本等方式攻击,可以在后台编码写好返回的数据,如HTML编码等;对于CSS等方面的攻击可通过一些公共的前端框架来进行过滤。
- 禁止使用 GET 方式提交数据
- 增加来源URL验证
- 增加表单验证,如验证码等
- 利用浏览器发出请求时附带上和服务器需要验证的随机字符串 etc.
在 AJAX 开发中,保障接口安全是非常重要的,安全保证主要包括身份认证、防篡改、防盗取、防攻击等。
在一些需要登录的操作中,需要进行身份认证,防止非法用户进行操作。在AJAX请求中添加相应的认证信息来实现这个目的。
为了保障网站的安全,在后端处理数据返回的时候,必须对数据进行严格的过滤和校验,防止恶意代码注入,抗 Xss ,防 CSRF 等;在前端页面上,应该开启 CSP(Content Security Policy),限制页面中的允许执行脚本,保障页面的安全。
技术手段的不断更新换代与进步,攻防双方的防御工具也不断的更新和升级,唯有在日常的编程实践中不断加强对其安全知识的学习与掌握,始终保持高度的安全意识,才能真正保障网站运营的安全及稳定。