浏览器安全

108 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

XSS攻击

XSS攻击就是往HTML文件中插入恶意JS代码。比如document.cookiesaddEventListener 监听用户的键盘事件、修改DOM生成广告等。

分类

存储性XSS

将恶意代码存储到有漏洞的服务器, 访问含有恶意脚本的页面就会自动加载恶意脚本, 然后恶意脚本就会上传你的cookie到他们的服务器。

反射性XSS

比如说你设置了视图要展示xss参数, 然后点击了一个恶意链接是http://localhost:3000/?xss= 就会导致xss被替换成了

基于DOM的XSS

比如通过网络传输页面过程中修改HTML页面内容, 有的用wifi路由器劫持, 有的是本地恶意软件, 主要就是在web资源传输过程中或用户使用页面的过程中修改web页面的数据.

怎么阻止XSS攻击

  1. CSP策略
  2. 服务端对于一些关键的字符进行转码,比如可以替换为空
  3. 服务器响应头用HttpOnly属性,这样无法通过document.cookie获取cookie

CSRF攻击

CSRF攻击就是黑客利用用户的登录态,通过第三方站点干坏事。

分类

自动发起GET请求

在处于登录状态时,打开某恶意链接,恶意链接中有一个图片,图片的src就是一个Get请求。当打开链接加载图片时,就会触发src中的代码从而发起Get请求。

自动发起POST请求

当用户打开黑客页面时会自动提交POST请求。

<!DOCTYPE html>
<html>
<body>
  <h1>黑客的站点:CSRF攻击演示</h1>
  <form id='hacker-form' action="https://xxx.org/sendcoin" method=POST>
    <input type="hidden" name="user" value="hacker" />
    <input type="hidden" name="number" value="100" />
  </form>
  <script> document.getElementById('hacker-form').submit(); </script>
</body>
</html>

引诱用户点击链接

比如网站出现了一个中奖图片

<div>
  <img width=150 src=http://images.xuejuzi.cn/1612/1_161230185104_1.jpg> </img> </div> <div>
  <a href="https://time.geekbang.org/sendcoin?user=hacker&number=100" taget="_blank">
    点击领大奖
  </a>
</div>

用户一点就发起post请求了。

怎么预防CSRF攻击

  1. 在服务端响应头上添加set-cookie设置cookie时加上SameSite。这样第三方站点再发起请求时请求头就不会带着Cookie。
  2. 服务端根据Http请求头中的Referer和Origin属性来判断是否是第三方站点,如果是第三方站点就不提供服务。
  3. 用CSRFToken也可以避免CSRF攻击。浏览器向服务器发起请求的时候存放csrf-token,然后再次发起请求的时候带上token,第三方站点带不上token,也就无法成功。
<!DOCTYPE html>
<html>
<body>
    <form action="https://time.geekbang.org/sendcoin" method="POST">
      <input type="hidden" name="csrf-token" value="nc98P987bcpncYhoadjoiydc9ajDlcn">
      <input type="text" name="user">
      <input type="text" name="number">
      <input type="submit">
    </form>
</body>
</html>