XSS,CSRF,SSRF三种常见的Web服务端漏洞均是由于,服务器端对用户提供的可控数据过于信任或者过滤不严导致的。
XSS,CSRF,SSRF区别
XSS:(跨站脚本攻击)是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句被执行。通常指黑客通过 HTML 注入 篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。
CSRF:(跨站请求伪造)是服务器端没有对用户提交的数据进行校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。
SSRF:(服务端请求伪造)是服务器对用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。
xss防御
大部分XSS(跨站脚本攻击)的目的都是通过浏览器的同源策略,来获取用户Cookie,从而冒充用户登陆系统的。
可以使用 HttpOnly
来禁止JavaScript读取Cookie值,窃取用户身份(在setcookie方法的第七个传入参数中设置了变量true,表示这个cookie具有Http-only属性,那么任何JavaScript脚本都没有权限读取这条cookie的内容。)
一般在后台通过http设置前台cookie时添加此参数。如下为java设置方式:
response.setHeader("Set-Cookie","deniro=1; Path=/;Domain=www.deniro.net;"+"Max-Age=30;HTTPOnly");
只为cookie中的值设置HttpOnly
是不够的,因为XSS攻击并不是只能获取用户COOKIE,它的攻击类型有:
- 利用xss获得cookie
- 重定向到钓鱼网站
- 展示不法内容或广告
防御措施有:
- 对字符实体进行转义
- 使用
HttpOnly
来禁止JavaScript读取Cookie值 - 输入时校验
- 浏览器与Web应用端采用相同的字符编码
- 对URL参数进行过滤(白名单和黑名单)
- 如果 <script>, <style>, <img> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执行恶意连接。 确保:href 和 src 的值必须以 http://开头,白名单方式
csrf防御
Referer标识当前请求的来源页面,浏览器访问时除了自动带上Cookie还会自动带上Referer,所以服务端可以检测Referer头是否本网站页面来决定是否响应请求。
token就是服务端返回给客户端类似sessionid那样一长串的类值(长是为了防暴力猜解)。csrf依赖于浏览器该问链接时自动对应网站的cookie带上,token可以不存道cookie中,这样我们就可以通过检测发送过来的数据包中是否有正确的token值来决定是否响应请求。
ssrf防御
- 限制协议为HTTPS,安装SSL证书,对网站传输加密数据
- 不用限制302重定向
- 设置URL白名单或者限制内网IP
其他安全措施
- 服务器及时安装系统补丁
- 服务器安装和设置防火墙
- 关闭不需要的服务和端口,设置白名单
- 定期对服务器进行备份
- 设置监控机制和回滚机制,日志监控
- 账号和密码保护(加密措施、验证码措施、密码复杂度)
- 请求数据对称加密
本文固定连接:https://code.zuifengyun.com/2022/09/3072.html,转载须征得作者授权。