如何正确防御xss攻击
1、基于特征的防御。XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同,这就是给XSS漏洞防御带来的困难,不可能以单一特征来概括所有XSS攻击。
传统的XSS防御在进行攻击鉴别时多采用特征匹配方式,主要是针对JavaScript这个关键词进行检索,但是这种鉴别不够灵活,凡是提交的信息中各有JavaScript时,就被硬性的判定为XSS攻击。
2、基于代码修改的防御。Web页面开发者在编写程序时往往会出现一些失误或漏洞,XSS攻击正是利用了失误和漏洞,因此一种比较理想的方法就是通过优化Web应用开发来减少漏洞,避免被攻击:
①用户向服务器上提交的信息要对URL和附带的HTTP头、POST数据等进行查询,对不是规定格式、长度的内容进行过滤。
②实现Session标记、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
③确认接收的内容被妥善的规范化,仅包含最小的、安全的Tag,去掉任何对远程内容的引用,使用HTTP only的cookie。
3、客户端分层防御策略。客户端跨站脚本攻击的分层防御策略是基于独立分配线程和分层防御策略的安全模型。它建立在客户端,这是它与其他模型最大的区别。之所以客户端安全性如此重要,客户端在接受服务器信息,选择性的执行相关内容。这样就可以使防御XSS攻击变得容易,该模型主要由三大部分组成:
①对每一个网页分配独立线程且分析资源消耗的网页线程分析模块;
②包含分层防御策略四个规则的用户输入分析模块;
③保存互联网上有关XSS恶意网站信息的XSS信息数据库。
要想从根本上解决XSS攻击,就要对Web应用程序源代码进行检查,发现安全漏洞进行修改。但是这种方法在实际中给用户带来了不便,如:需要花费大量的人力财力;可能无法找到当时的网站开发人员、需要网站下线等。对代码进行修改后,由于增加了过滤条件和功能,同时也给服务器带来了计算压力。通常的解决方法是在数据库服务器前端部署入侵防御产品。XSS攻击具有变种多、隐蔽性强等特点,传统的特征匹配检测方式不能有效地进行防御,需要采用基于攻击手法的行为监测的入侵防御产品产品才能够精确地检测到XSS攻击。
传统防御技术
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攻击-百度百科
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()
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
a
v
a
s
c
r
i
p
t
: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”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。
首先我们来认识下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编码等。
传统防御技术传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
什么是xss攻击?
5、在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。四、跨站脚本攻击的防御 XSS攻击主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序员较高的编程能力和安全意识,当然安全的软件开发流程及其他一些编程安全原则也可以大大减少XSS安全漏洞的发生。这些防范XSS漏洞原则包括...
前端程序员必须知道的 Web 漏洞,快来看看
提交的 XSS 代码会存储在服务器端,如数据库、内存、文件系统内,下次请求目标页面时不再提交 XSS 代码。 文档型的 XSS 攻击不会经过服务器,作为中间人的角色,在数据传输过程中劫持到网络数据包,然后修改里面的 html 文档。 1.3、XSS 的防御措施 措施1:编码。 对这些数据进行 html entity 编码。客户端和服务器...
几种极其隐蔽的XSS注入的防护
参考资料:UTF7-XSS不正确地拼接 JavaScript\/JSON 代码段 隐蔽指数: 5 伤害指数: 5 Web 前端程序员经常在 PHP 代码或者某些模板语言中, 动态地生成一些 JavaScript 代码片段, 例如最常见的:var a = '<?php echo htmlspecialchars($name); ?';不想, $name 是通过用户输入的, 当用户输入a&rsquo...
常见的网络攻击方式
常见的网络攻击方式有口令入侵、特洛伊木马、www欺骗等。1、口令入侵 所谓口令入侵是指使用某些合法用户的账号和口令登录到目的主机,然后再实施攻击活动。这种方法的前提是必须先得到该主机上的某个合法用户的账号,然后再进行合法用户口令的破译。获得普通用户账号的方法非常多。2、特洛伊木马 特洛伊木马能...
CSRF跨站请求伪造的安全防护
大家好,我是中恒。本文主要介绍和总结了CSRF跨站请求伪造的基本原理和主要防范措施,工作中有用到的朋友不妨收藏转发一下,以备您参考。CSRF跨站点请求伪造(Cross—Site Request Forgery),跟类似XSS攻击一样,存在着巨大的安全隐患,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对...
什么是WAF防护?
WAF,即Web Application Firewall,中文名网站应用级入侵防御系统,是网络安全领域的一项重要技术。它旨在增强网站服务器的安全保护,通过实施一套严格的安全策略来守护Web应用免受黑客侵扰。WAF的主要用途:首先,WAF作为网站安全的核心防护,能够有效抵御常见的web漏洞攻击,如SQL注入、XSS跨站攻击等,以及利用...
什么是JavaScript注入及简单的防御方法
因为同源策略的原因,也就导致了我们的XSS Payload(XSS攻击代码)必须在我们希望攻击的同一个域下触发。例如攻击者如果想窃取在www.a.com下的cookie,那就必须在www.a.com这个域(可以是不同页面,但要保证是同一个域)下的的某一个页面放置XSS代码,可以是存储型,也可以是反射型或DOM Baesd型的。4...
男生说XSS是什么意思?
XSS全称是跨站脚本攻击,是指攻击者利用网站漏洞,将恶意脚本注入到网页中,从而实现盗取用户信息、传播恶意脚本等目的的攻击方式。攻击者可以通过伪造表单、篡改用户数据等方式进行攻击,使受害者的个人信息和账户安全受到威胁。因此,对于网站开发人员来说,防范XSS攻击是必不可少的安全措施。XSS攻击从2018...
XSS攻击原理是什么
Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie...
跨站脚本攻击危害
跨站脚本攻击,简称XSS,是一种常见的网络安全威胁,攻击者利用有漏洞的程序植入JavaScript、VBScript、ActiveX或Flash,误导用户执行恶意代码。这种攻击一旦成功,可能导致用户的账户被盗,个人信息被篡改,甚至cookie被窃取或污染,使得用户面临虚假广告等风险。每天,全球范围内都有大量的恶意XSS代码在活动。Brett...
倚荷潘舒: 要想从根本上解决XSS攻击,就要对Web应用程序源代码进行检查,发现安全漏洞进行修改.但是这种方法在实际中给用户带来了不便,如:需要花费大copy量的人力财力;可能无法找到当时的网站开发人员、需要网站下线等.对代码进行修改后,由于增加了过滤条件和功能,同时也给服务器带来了计算压力.通常的解决方法是在数据库服务器前端部署入侵防zd御产品.XSS攻击具有变种多、隐蔽性强等特点,传统的特征匹配检测方式不能有效地进行防御,需要采用基于攻击手法的行为监测的入侵防御产品产品才能够精确地检测到XSS攻击.
庆阳市19159479533: 如何防止xss攻击,需要过滤什么 - ?
倚荷潘舒: XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击.<br><br>一、HttpOnly防止劫取Cookie<br><br>HttpOnly最早由微软提出,至今已经成为一个标准.浏览器将禁...
庆阳市19159479533: asp项目中如何防止xss攻击 - ?
倚荷潘舒: asp中防止xss攻击的方法如下:1. 确保所有输出内容都经过 HTML 编码.2. 禁止用户提供的文本进入任何 HTML 元素属性字符串.3. 根据 msdn.microsoft.com/library/3yekbd5b 中的概述,检查 Request.Browser,以阻止应用程序使用 Internet ...
庆阳市19159479533: 防范xss攻击的措施是甚么?
倚荷潘舒: 避免跨站脚本还是自己做好验证/过滤/编码等
庆阳市19159479533: 如何防止跨站点脚本攻击 - ?
倚荷潘舒: 你好~ XSS漏洞产生的原因:跨站点脚本的主要原因是程序猿对用户的信任.开发人员轻松地认为用户永远不会试图执行什么出格的事情,所以他们创建应用程序,却没有使用任何额外的代码来过滤用户输入以阻止任何恶意活动.另一个原因是...
庆阳市19159479533: 对于现在存在的SQL注入,XSS的攻击,CSRF目前有什么好的防御手段 - ?
倚荷潘舒: 防止xss,sql等的攻击大部分需要程序员自己注意. sql注入本身就是sql语句写法的漏洞导致. xss攻击的防御还是需要对非法字符串进行判断过滤.
庆阳市19159479533: 如何防止XSS跨站攻击,让fortify检测通过 - ?
倚荷潘舒: 使用微软的 反XSS类库 就得了.替换字符就能防御, CSDN就不被黑了.以前久不久就被XSS.还有16进制也要防御.
庆阳市19159479533: jsp 如何 xss 防范 - ?
倚荷潘舒: 1、antisamy插件防止XSS跨站脚本攻击,很简单,很方便,建议参考.2、写一个Filter,对产生跨站的关键字进行过滤.
庆阳市19159479533: XSS与CSRF有什么区别吗? - ?
倚荷潘舒: XSS是获取信息,不需要提前知道其他用户页面的代码和数据包.CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包.要完成一次CSRF攻击,受害者必须依次完成两个步骤:登录受信任网站A,并在本地生成Cookie.在不登出A的情况下,访问危险网站B. CSRF的防御 服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数.通过验证码的方法. by三人行慕课