xss攻击
xss攻击即cross site script, 跨脚本攻击, 缩写是css, 为了和层叠样式表区分, 改成了xss
xss攻击是指攻击者在网站上注入恶意攻击的客户端代码, 通过恶意脚本对客户端网页进行篡改, 从而在用户浏览网页时, 对浏览器进行控制和获取用户隐私数据的一种攻击方式
攻击者对客户端网页注入恶意脚本包括js, 有时也会包含HTML, Flash, 有多种进行xss攻击, 共同特点是: 将一些隐私数据像cookie, session发送给攻击者, 将受害者重定向带一个受攻击者控制的网站, 在受害者机器上进行操作
xss攻击分为: 反射型, 存储型, 基于DOM
反射型(重定向到其他网站)
反射型xss只是简单把用户输入的数据”反射”给浏览器, 这种攻击方式往往需要攻击者诱使用户点击一个恶意连接, 或者提交一个表单, 或者进入一个恶意网站, 注入脚本进入被攻击者的网站
举个例子, 当用户访问某个网站时, 网站会不小心点击到恶意连接, 页面会跳转到攻击者预先准备的网页, 这个时候会执行js的脚本, 可能是恶作剧的脚本, 或者是能获取用户隐私的脚本
存储型(传入恶意代码至服务器)
存储型xss会把用户输入的数据存储在服务端, 当浏览器请求数据时, 脚本从服务器传过来并执行, 这种xss具有很强的稳定性
比较常见的一个场景是攻击方在论坛或社区等网站上提交一段恶意js脚本代码, 服务器接收后会保存下来,
其他用户再去访问这段内容时, 恶意脚本就会被执行
DOM型(破坏页面结构)
发生在客户端的界面上, 指用户在浏览网页时, 被注入了恶意代码修改了dom结构, 用户这时如果不小心点击了, 就会执行对应的脚本
防范xss攻击的方法
最简单的做法: 对所有cookie设置httponly, 这样设置后所有script脚本都不能读取cookie, 设置cookie的方法是setHeader
1 response.setHeader(` `"Set-Cookie"` `, "cookiename=httponlyTest;Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");
输入检查: 不要相信任何用户输入, 对任何用户的输入都要内容检查, 过滤, 建立可信任字符和HTML的白名单, 比如decodingMap, 对于特殊的字符, ‘>’, ‘<’都会过滤, 防止xss攻击
CSRF跨站请求伪造
csrf攻击是借助攻击者对受害者cookie骗取服务器的信任, 在受害者毫不知情的情况下伪造请求访问服务器, 在未授权的情况下执行需要权限的操作
cookie是服务器保存在客户端的一段小数据, 他会在每次客户端向服务器发送请求时携带发送, 主要用于保存会话状态管理, 自定义设置
所有浏览器所持有的cookie会分为两种, session Cookie(会话结束就被删除), permanent cookie(指定有效时间)
验证码: 对抗CSRF最有效的办法, CSRF往往是在用户不知情的情况下伪造请求, 但是验证码可以强迫用户必须与页面交互后才能发送请求, 但是验证码不是万能的, 不能所有操作都要验证码, 这只是一种辅助方案
设置referer Ckeck 在http协议中, http头中有一个字段叫Referer, 记录了http请求的来源地址, 通过检测请求来源是否合法, 来判断是否响应请求(缺点: referer是浏览器提供的, 存在被破解的风险, 并且referer也会被修改)
添加token验证 CSRF请求之所以能成功, 关键在于攻击者利用到获取的cookie来通过安全验证, 所以必须设置一个cookie之外的攻击者访问不到的数据, 并在服务器设置拦截器验证token, 如果token不准确, 就会拒绝这次访问