问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何正确防御xss攻击

发布网友 发布时间:2022-04-22 17:36

我来回答

7个回答

热心网友 时间:2022-04-06 07:54

传统防御技术

2.1.1基于特征的防御

传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。

2.1.2 基于代码修改的防御

和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:

1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

2、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。

3、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

当然,如上方法将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点。

并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞。

扩展资料:

XSS攻击的危害包括

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

3、盗窃企业重要的具有商业价值的资料

4、非法转账

5、强制发送电子邮件

6、网站挂马

7、控制受害者机器向其它网站发起攻击

受攻击事件

新浪微博XSS受攻击事件

2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。

大量用户自动发送诸如:

“郭美美事件的一些未注意到的细节”,“建党大业中穿帮地方”,“让女人心动的100句诗歌”,“这是传说中的神仙眷侣啊”等等微博和私信,并自动关注一位名为hellosamy的用户。

事件的经过线索如下:

20:14,开始有大量带V的认证用户中招转发蠕虫

20:30,某网站中的病毒页面无法访问

20:32,新浪微博中hellosamy用户无法访问

21:02,新浪漏洞修补完毕

百度贴吧xss攻击事件

2014年3月9晚,六安吧等几十个贴吧出现点击推广贴会自动转发等。并且吧友所关注的每个关注的贴吧都会转一遍,病毒循环发帖。并且导致吧务人员,和吧友被封禁。

参考资料:

XSS攻击-百度百科

热心网友 时间:2022-04-06 09:12

  XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

  一、HttpOnly防止劫取Cookie

  HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。

  我们来看下百度有没有使用。

  未登录时的Cookie信息
  可以看到,所有Cookie都没有设置HttpOnly,现在我登录下

  发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。

  下面我用PHP来实现下:

  <?php
  header("Set-Cookie: cookie1=test1;");
  header("Set-Cookie: cookie2=test2;httponly",false);

  setcookie('cookie3','test3',NULL,NULL,NULL,NULL,false);
  setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);
  ?>
  <script>
  alert(document.cookie);
  </script>
  js只能读到没有HttpOnly标识的Cookie

  二、输入检查

  输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<、>、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。

  例如网站注册经常用户名只允许字母和数字的组合,或者邮箱电话,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。

  网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。比如一款php的lib_filter类:

  $filter = new lib_filter();
  echo $filter->go('1+1>1');
  它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。

  三、输出检查

  大多人都知道输入需要做检查,但却忽略了输出检查。

  1、在HTML标签中输出

  如代码:

  <?php
  $a = "<script>alert(1);</script>";
  $b = "<img src=# onerror=alert(2) />";
  ?>
  <div><?=$b?></div>
  <a href="#"><?=$a?></a>
  这样客户端受到xss攻击,解决方法就是对变量使用htmlEncode,php中的函数是htmlentities

  <?php
  $a = "<script>alert(1);</script>";
  $b = "<img src=# onerror=alert(2) />";
  ?>
  <div><?=htmlentities($b)?></div>
  <a href="#"><?=htmlentities($a)?></a>

  2、在HTML属性中输出

  <div id="div" name ="$var"></div>
  这种情况防御也是使用htmlEncode

  在owasp-php中实现:

  $immune_htmlattr = array(',', '.', '-', '_');
  $this->htmlEntityCodec->encode($this->immune_htmlattr, "\"><script>123123;</script><\"");

  3、在<script>标签中输出

  如代码:
  <?php
  $c = "1;alert(3)";
  ?>
  <script type="text/javascript">
  var c = <?=$c?>;
  </script>
  这样xss又生效了。首先js变量输出一定要在引号内,但是如果我$c = "\"abc;alert(123);//",你会发现放引号中都没用,自带的函数都不能很好的满足。这时只能使用一个更加严格的JavascriptEncode函数来保证安全——除数字、字母外的所有字符,都使用十六进制"\xHH"的方式进行编码。这里我采用开源的owasp-php方法来实现
  $immune = array("");
  echo $this->javascriptCodec->encode($immune, "\"abc;alert(123);//");
  最后输出\x22abc\x3Balert\x28123\x29\x3B\x2F\x2F

  4、在事件中输出

  <a href="#" onclick="funcA('$var')" >test</a>
  可能攻击方法
  <a href="#" onclick="funcA('');alter(/xss/;//')">test</a>
  这个其实就是写在<script>中,所以跟3防御相同

  5、在css中输出

  在owasp-php中实现:

  $immune = array("");
  $this->cssCodec->encode($immune, 'background:expression(window.x?0:(alert(/XSS/),window.x=1));');
  6、在地址中输出

  先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent方法。

  在owasp-php中实现:

  $instance = ESAPI::getEncoder();
  $instance->encodeForURL(‘url’);
  四、处理富文体

  就像我写这篇博客,我几乎可以随意输入任意字符,插入图片,插入代码,还可以设置样式。这个时要做的就是设置好白名单,严格控制标签。能自定义 css件麻烦事,因此最好使用成熟的开源框架来检查。php可以使用htmlpurify

  五、防御DOM Based XSS

  DOM Based XSS是从javascript中输出数据到HTML页面里。

  <script>
  var x = "$var";
  document.write("<a href='"+x+"'>test</a>");
  </script>
  按照三中输出检查用到的防御方法,在x赋值时进行编码,但是当document.write输出数据到HTML时,浏览器重新渲染了页面,会将x进行解码,因此这么一来,相当于没有编码,而产生xss。
  防御方法:首先,还是应该做输出防御编码的,但后面如果是输出到事件或脚本,则要再做一次javascriptEncode编码,如果是输出到HTML内容或属性,则要做一次HTMLEncode。

  会触发DOM Based XSS的地方有很多:

  document.write()、document.writeln()、xxx.innerHTML=、xxx.outerHTML=、innerHTML.replace、document.attachEvent()、window.attachEvent()、document.location.replace()、document.location.assign()

热心网友 时间:2022-04-06 10:47

XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。

XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS攻击。

传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。这种检测方法的缺陷显而易见:骇客可以通过插入字符或完全编码的方式躲避检测:

躲避方法1)在javascript中加入多个tab键,得到
< IMG SRC="jav ascript:alert('XSS');" >;


躲避方法2) 在javascript中加入 编码字符,得到
< IMG SRC="javascript:alert('XSS');" >;


躲避方法3) 在javascript中加入
字符,得到
< IMG SRC="jav
ascript:alert('XSS');" >;


躲避方法4)在javascript中的每个字符间加入回车换行符,得到
< IMG SRC="j\r\na\r\nv\r\n\r\na\r\ns\r\nc\r\nr\r\ni\r\np\r
\nt\r\n:alert('XSS');" >


躲避方法5)对"javascript:alert('XSS')"采用完全编码,得到
< IMGSRC=javascrip&#x
74:alert('XSS
') >

一、HttpOnly防止劫取Cookie

HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。

未登录时的Cookie信息

可以看到,所有Cookie都没有设置HttpOnly,现在登录:

发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。

js只能读到没有HttpOnly标识的Cookie

二、输入检查

输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<、>、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。

例如网站注册经常用户名只允许字母和数字的组合,或者邮箱电话,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。

网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。

热心网友 时间:2022-04-06 12:38

首先我们来认识下XSS攻击:
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、
VBScript、ActiveX、 Flash
或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS分类有:反射型、存储型、DOM型。
XSS能够造成哪些危害?
弹窗、盗取cookie,而其实呢,xss能够造成的危害远不止这些,还有一些如网站挂马、蠕虫、修改网页内容的高级利用。
XSS防御
方案一:添加HttpOnly
HttpOnly是cookie里面一个属性,假如在cookie里面设置了HttpOnly这个属性,那么JavaScript将无法访问到我们到cookie,但是这个方法也只能是防御cookie劫持。HttpOnly设置规则如下。
header("set-cookie: username=admin");
header("set-cookie: password=123456;httponly",false);
?>
方案二:对输入输出做严格过滤
输入输出框是为了方便普通用户与服务器交互用的,所以有些特殊的字符普通用户是用不上的,在PHP中我们可以利用htmlspecialchars()、htmlentities()对HTML做实体转义。如以下字符会被转义为
&(和号)变为 &
"(双引号)变为 &quto;
'(单引号)变为 '
<(小于)变为 ≪
>(大于)变为 >
同样我们可以对我们的输入输出做一些编码转换,如HTML编码、CSS编码、JavaScript编码等。

热心网友 时间:2022-04-06 14:46

传统防御技术传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。

热心网友 时间:2022-04-06 17:11

过滤含有js的代码,网上有这样的类文件

热心网友 时间:2022-04-06 19:52

<script>alert(/xss/)</script>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 如何防止xss攻击,需要过滤什么 XSS 攻击时怎么绕过 htmlspecialchars 函数 用水天相接怎么造句 水天相接造句10字以内 昂首东望和水天相接是什么意思 水天相接的意思是什么四年级 兑换多少人民币 美元兑人民币比率是多少 10965美元兑换人民币是多少钱? 今天美金换人民币的兑换率? 美元对人民币汇率是多少?190块美元可以兑换多少人民币? 要JAVA基础的一些练习题与参考答案 java基础试题 (特急)《Java程序设计》理论题库—判断题(要准确答案) JAVA基础编程题纠错 Java 基础编程题求解,不是很懂 java编程题在线等 有几个java网络编程基础的选择题 哪位大神给下答案 java基础编程题求解,请写的基础一点不然根本看不懂啊 想找一些java的带讲解的基础练习题 java入门编程题 如何绕过 浏览器xss filter 有方法能绕过IE11的xss防护机制吗? 如何避免被 chrome浏览器 xss过滤 有什么 绕过 htmlentities 进行 xss 攻击的方法吗 在input的标签里怎么绕过xss双引号的编码过滤 发现XSS漏洞的一般做法有哪些? 如何绕过火狐浏览器的xss防御 如何利用xss绕过360网盾做防360拦截空间,详解 关于&lt;script&gt;alert(1)&lt;/script&gt;的xss问题? 如何避免xss,比如svg&quot;&gt;&lt;svg+onload%3D&#39;document.cookie&#39;&gt; xss漏洞如何防御? XSS攻击的定义,类型以及防御方法? 如何关闭跨站点脚本 (XSS) 筛选器 数据结构的题,帮忙一下,是一小套题 请教各位大神关于从js写法上避免xss攻击的问题 asp 求修复方法 XSS跨站脚本漏洞 姓氏里是“侯”还是“候”? 侯姓的来源和历史是什么? 侯姓和候姓的区别是什么? 侯姓的来源