前端XSS攻击和防御

  xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。比如获取用户的Cookie,导航到恶意网站,携带木马等。

  大部分的xss漏洞都是由于没有处理好用户的输入,导致攻击脚本在浏览器中执行,这就是跨站脚本漏洞的根源。

  xss攻击类型

  1.非持久型XSS攻击

  非持久型XSS(Non-persistent)又叫做反射XSS(Reflect XSS),它是指那些浏览器每次都要在参数中提交恶意数据才能触发的跨站脚本漏洞。

  非持久型XSS漏洞实际上大多数攻击数据是包含在URL中的,类似这样的:http://www.vicitim.com/vul.asp?hi=[code]。需要用户的浏览器访问到这个URL恶意代码才执行,攻击者一般会把URL发给用户让用户通过浏览器去访问。不过URL里面带有稀奇古怪的代码确实有点奇怪,为了掩人耳目,攻击者可以发一个看起来没问题的URL,再通过那个页面跳转到恶意的URL;甚至也可以让一个域名转向到恶意URL,把那个域名发给用户。

  2.持久型XSS攻击

  持久型XSS(Persistent)又叫做存储XSS(Stored XSS),与非持久型XSS相反,它是指通过提交恶意数据到存储器(比如数据库、文本文件等),Web应用程序输出的时候是从存储器中读出恶意数据输出到页面的一类跨站脚本漏洞。

  持久型XSS攻击就简单一点,只要第一次把攻击代码提交到服务器就一劳永逸了。比如我在某个论坛发帖的时候,论坛没有对传入的HTML作处理,那么我就可以发一个帖子内容包含“<script>[code]</script>”的帖子。呵呵,然后就守株待兔地等着来看帖子的人执行恶意脚本了。持久型XSS漏洞是把恶意脚本存储到了数据库,访问页面的时候完全没有预兆,所以它的危害也比非持久型XSS略微高一点。

 常见的xss攻击方法

  1.绕过XSS-Filter,利用<>标签注入Html/JavaScript代码;

  2.利用HTML标签的属性值进行xss攻击。例如:<img src=“javascript:alert(‘xss’)”/>;(当然并不是所有的Web浏览器都支持Javascript伪协议,所以此类XSS攻击具有一定的局限性)

  3. 空格、回车和Tab。如果XSS Filter仅仅将敏感的输入字符列入黑名单,比如javascript,用户可以利用空格、回车和Tab键来绕过过滤,例如:<img src=“javas  cript:alert(/xss/);”/>;

  4. 利用事件来执行跨站脚本。例如:<img src=“#” οnerrοr= “alert(1)”/>,当src错误的视乎就会执行onerror事件;

  5. 利用CSS跨站。例如:Body {backgrund-image: url(“javascript:alert(‘xss’)”)};

  6. 扰乱过滤规则。例如:<IMG SRC=“javaSCript: alert(/xss/);”/>;

  7.利用字符编码,透过这种技巧,不仅能让XSS代码绕过服务端的过滤,还能更好地隐藏Shellcode;(JS支持unicode、eacapes、十六进制、十进制等编码形式)

  8.拆分跨站法,将xss攻击的代码拆分开来,适用于应用程序没有过滤 XSS关键字符(如<、>)却对输入字符长度有限制的情况下;

  9.DOM型的XSS主要是由客户端的脚本通过DOM动态地输出数据到页面上,它不依赖于提交数据到服务器,而是从客户端获得DOM中的数据在本地执行。容易导致DOM型的XSS的输入源包括:Document.URL、Location(.pathname|.href|.search|.hash)、

Document.referrer、Window.name、Document.cookie、localStorage/globalStorage;

    XSS攻击防御

  原则:不相信客户输入的数据
  注意:  攻击代码不一定在<script></script>中

  1.使用XSS Filter。

  输入过滤,对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据。比如:电话号码必须是数字和中划线组成,而且要设定长度上限。过滤一些些常见的敏感字符,例如:< > ‘ “ & # \ javascript expression  "οnclick="  "onfocus";过滤或移除特殊的Html标签, 例如: <script>, <iframe> ,  &lt; for <, &gt; for >, &quot for;过滤JavaScript 事件的标签,例如 "οnclick=", "onfocus" 等等。

  输出编码,当需要将一个字符串输出到Web网页时,同时又不确定这个字符串中是否包括XSS特殊字符(如< > &‘”等),为了确保输出内容的完整性和正确性,可以使用编码(HTMLEncode)进行处理。

  2.DOM型的XSS攻击防御

  把变量输出到页面时要做好相关的编码转义工作,如要输出到 <script>中,可以进行JS编码;要输出到HTML内容或属性,则进行HTML编码处理。根据不同的语境采用不同的编码处理方式。

  3.HttpOnly Cookie

  将重要的cookie标记为http only,   这样的话当浏览器向Web服务器发起请求的时就会带上cookie字段,但是在脚本中却不能访问这个cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie:

 

转载于:https://www.cnblogs.com/wqhwe/p/5416976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端和后端都可以采取措施来防御跨站脚本攻击(XSS)。 在前端,可以采取以下措施: 1. 输入验证和过滤:对用户输入的数据进行验证,并过滤掉潜在的恶意脚本。可以使用安全的HTML编码库,如DOMPurify或he.js,来对用户输入进行转义和过滤。 2. 设置CSP(Content Security Policy):通过设置合适的CSP策略,限制页面中可以加载的资源和执行的脚本。CSP可以防止恶意脚本的注入和执行。 3. 使用HTTP Only标记:将敏感的Cookie标记为HTTP Only,这样浏览器将禁止通过JavaScript访问这些Cookie,减少了被盗取的风险。 4. 避免使用eval()和innerHTML:这些函数容易导致XSS漏洞,尽量使用更安全的方式来操作DOM和执行动态代码。 在后端,可以采取以下措施: 1. 输入验证和过滤:对用户输入的数据进行验证,并过滤掉潜在的恶意脚本。可以使用合适的编码函数,如htmlspecialchars或urlencode,来转义用户输入中的特殊字符。 2. 输出转义:在将用户输入的数据输出到HTML页面时,使用合适的编码函数来转义特殊字符,如htmlspecialchars或encodeURIComponent。 3. 输入长度限制:限制用户输入的长度,避免长字符串导致的攻击。 4. 使用安全的框架和库:选择使用经过安全审计和测试的框架和库,这些框架和库通常会提供一些内置的安全机制来防御XSS等攻击。 需要注意的是,前端和后端的防御措施是相辅相成的,只有同时在前端和后端进行防御,才能更好地防止XSS攻击

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值