程序员该如何防御xss类漏洞

暗月博客 2019年11月21日15:15:42评论345 views字数 2091阅读6分58秒阅读模式
摘要

1、用户输入原样输出 利用方法:直接在输出的地方进行xss攻击
解决方案:
需要进行过滤,最常见的比如过滤 < 、>,
如下内容输入:

1、用户输入原样输出

利用方法:直接在输出的地方进行xss攻击

解决方案:
需要进行过滤,最常见的比如过滤 < 、>,
如下内容输入:

http://xxx.com/?umod=commentsoutlet&act=count&siteid=3&libid=9&dataid=1480&score=<img src=1 onerror=alert(1);>&func=haoping&_=1353475261886

可以直接被执行

2、输出在<script></script>之间
利用方法:
1)通过闭合标签的方式来进行xss攻击,如注入</script><script>xss code</script><script>
2) 注入特殊的代码保证<script> </script>标签内的代码仍然是正常的JS语法,且可以执行恶意JS代码

如输入aaaa 显示:

<script type='text/javascript'>document.domain='xxxx.com';_ret={"_res":2};try{parent.aaaaaaaaa</script><script>alert(1)</script>(_ret);}catch(err){aaaaaaaaa</script><script>alert(1)</script>(_ret);}</script>

则可以通过输入

eval(‘alert(1)’);void

<script type='text/javascript'>document.domain='xxxx.com';_ret={"_res":2};try{parent.eval('alert(1)');void(_ret);}catch(err){eval('alert(1)');void(_ret);}</script>

解决方案:
1)、过滤用户输入的内容,常见的是过滤 ‘、”、;、< 、>
2)、尽量不要把用户可以控制的变量内容输出在<script>标签内部

3、输出在HTML属性页面里面
利用方法:
在属性标签里面注入js代码,比如 在input标签里面注入 onclick事件

解决方案:
1)、由于出现在HTML属性的html实体会被自动转义并执行,故需要严格过滤 / 、 & 字符。
2)、 匹配HTML实体时若用正则匹配需要考虑到&#XX; 变换成&#00XX;也是同样可以执行的

4、 双字节编码绕过
利用方法:
在特殊的字符集(常见GBXXXX)编码情况下,输入” 被转义/”的情况下,通过输入一些高位编码可以注入代码从而闭合”如输入 %a0″,就可以绕过转义的情况。

解决方案:
1、可以统一指定编码为UTF8
2、 对高位的字符进行过滤,不允许输入非文本字符。

5、 输出在双引号内

利用方法:
用户可以通过输入 / 来匹配正文中的” 从而使后面的语法失效,导致注入XSS代码。
解决方案:
对 / 进行过滤

 

6、输出在注释中

利用方法:
对于一些变量输出在注释中,可以通过换行的方式注入JS代码 如下图所示:
解决方案:
不允许在注释代码中插入用户可以控制的变量

7、输出在DOM函数中

常见的DOM XSS 为变量输出在函数 document.write、innerHTML、JQUERY中的$("#y").html("xxxxxxx");

利用方法:
将变量传递给DOM 函数的参数
解决方案:
对传递给DOM 函数的参数就行严格过滤,JS中由于支持unicode编码的字符,需要过滤 /

8、输出在eval函数中
利用方法:通过”;”注入代码到eval函数的参数中,从而执行js代码
解决方案:尽量不使用eval函数,对eval函数的参数进行严格过滤,过滤 “;”

 

9、输出在SRC属性标签

利用方法:
通过javascript vbscript data等伪协议执行js

解决方案:
1、对SRC的赋值进行过滤,不允许出现javascript: vsscript: data: 等伪协议。
2、由于html实体编码的字符仍然可以被解析,对& # : 均需要过滤

 

10 输出在flash关键函数中
在flash的关键函数
flash.external.ExternalInterface.call、getURL、navigateToURL、_evalJS及伪协议javascript:
传入用户可控的参数 都可能导致XSS

利用:对特定函数传递js代码可以执行JS。
如:

navigateToURL(new URLRequest(link), "_self"); 给link参数传递为:"javascript:alert(1)"

解决方案:
判断相关参数的合法性(如仅允许数字 字符),限制URL合法性,不允许出现javascript、;等字样

11、 FLASH加载任意XML文件

flash通常会通过xml配置文件来取参数,如果flash可以通过加载任意XML则可能导致远程加载任意flash、执行任意JS代码。
利用:
传递xml参数一个恶意地址,通知控制里面的参数的值来执行XSS
解决方案:
判断XML文件的合法性

http://www.3hack.com/bbs/?thread-index-fid-1-tid-74.htm

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
暗月博客
  • 本文由 发表于 2019年11月21日15:15:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   程序员该如何防御xss类漏洞https://cn-sec.com/archives/70925.html

发表评论

匿名网友 填写信息