跳到主要内容

Web 安全中的复杂请求和攻击防范

复杂请求

在对服务端的数据进行更新、删除、创建等操作时,由于这些操作对服务器数据有安全影响,浏览器会在实际请求之前进行一次预检请求。这种预检请求是一个 OPTIONS 请求(预请求 - 权限验证请求),因此服务器程序会多响应一次。预请求只会在跨域的异步请求中出现,因为同源策略主要针对异步请求。

避免 XSS 攻击

XSS 攻击通过在用户浏览器上执行恶意脚本,来盗取用户信息、会话令牌等。预防措施有以下几种:

转义输入输出

确保从用户那里接收的任何输入在输出到页面之前都被适当转义,包括对 HTML、JavaScript、CSS 等的转义。

使用内容安全策略(CSP)

CSP 可以限制网页上可以执行的脚本来源,减少 XSS 攻击的风险。

验证输入

对所有输入进行验证,拒绝任何不符合预期模式的输入。

使用安全框架

许多现代 Web 开发框架(如 React、Angular、Vue 等)已经内置了一些防护措施,自动处理 XSS 攻击。👍

避免直接插入 HTML

尽量避免使用innerHTML等方法直接插入 HTML 代码,因为这可能会导致未经转义的代码执行。

避免 CSRF 攻击

CSRF 攻击利用了 Web 应用中用户已经通过身份验证的会话,使攻击者能够以用户的名义执行不希望的操作。预防措施有以下几种:

使用 CSRF 令牌

在表单提交或者 AJAX 请求中使用一个随机生成的 CSRF 令牌,服务器验证该令牌以确保请求的合法性。

检查 Referer 头

验证请求的 Referer 头,确保请求来自于信任的源。虽然这种方法并不完全可靠,但可以作为一种额外的检查手段。

使用 SameSite Cookie 属性

将 Cookie 的 SameSite 属性设置为 Strict 或 Lax,可以防止浏览器在跨站请求中发送这些 Cookie,减少 CSRF 攻击的风险。🔒

双重提交 Cookie

使用 Cookie 中的值与表单中的值进行比较,来验证请求的来源。

自定义请求头

在 AJAX 请求中添加一个自定义请求头,并在服务器端验证这个头。由于非简单请求(即跨域请求)会触发预检请求,这可以防止恶意站点发起伪造的请求。