Web安全:XSS、CSRF等常见漏洞及防御措施

Web安全:XSS、CSRF等常见漏洞及防御措施

一、XSS(跨站脚本攻击)

定义与原理
XSS攻击指攻击者将恶意脚本(如JavaScript、HTML标签)注入到Web页面中,当用户访问该页面时,脚本在浏览器端执行,从而窃取用户信息、劫持会话或篡改页面内容。根据注入方式和持久性分为:

  • 存储型XSS:恶意脚本存储在服务器数据库(如评论、留言板),持久存在,每次用户访问时触发。
  • 反射型XSS:通过URL参数(如https://example.com/search?q=)注入,脚本反射到响应中,需用户点击恶意链接触发。
  • DOM型XSS:脚本通过修改页面DOM结构(如通过location.hashinnerHTML)执行,不依赖服务器端存储,但可能绕过传统输入过滤。

危害示例

  • 窃取Cookie:通过document.cookie获取用户身份信息,发送至攻击者服务器。
  • 钓鱼攻击:在页面中插入伪造的登录框,诱导用户输入账号密码。
  • 蠕虫传播:通过社交平台自动发送含恶意链接的消息,扩大攻击范围。

防御措施

  1. 输入/输出过滤与编码
    • 对用户输入(如表单、URL参数)进行严格校验,过滤或转义特殊字符(如<>转为<>)。
    • 输出时根据上下文使用HTML实体编码、JavaScript编码或URL编码。
  2. HTTP-only Cookie
    设置CookieHttpOnly属性,阻止JavaScript读取敏感Cookie(如Set-Cookie: session=XXX; HttpOnly),防止劫持会话。
  3. 内容安全策略(CSP)
    • 通过Content-Security-Policy头配置允许加载的资源源(如script-src 'elf'),禁止外部脚本执行。
    • 可细粒度控制scriptstyleimg等资源的来源,防止XSS注入。
  4. 上下文感知编码
    根据数据用途(HTML、JavaScript、CSS)选择不同的转义函数,避免二次注入(如富文本编辑器需更复杂的过滤逻辑)。
  5. 沙箱环境
    使用