XSS漏洞原理整理

一、通常使用XSS脚本来获取浏览器版本信息,alert(navigator.userAgnet )  ,浏览器的UserAgent是可以伪造的,比方火狐或者很多扩展都可以屏蔽或者自定义浏览器发送的UserAgent ,所以通过javaScript获取的浏览器对象有时候不一定时真的。但是浏览器之间的实现存在很大的差异,不同的浏览器之间会实现不同的功能,不同版本之间也会有差异,可以根据这个差别来区分浏览器的信息,比单方面读取 userAgent信息更加的准确。

if (window.ActiveXObject){
//判断是否是IE 7以上的版本
if (document.documentElement && typeof documet.document.documentElement.style.maxHeight!="undefinde"{
//判断是否是IE 8+
if(type document.adoptNode!="underfined"){//Safari3 &Opera & Chrome & Ie8}
}
}return "msie";
else if(type windows.opera!="underfined"){
//Opera 
return "OPera";
}
else if (type window.netsapce!=")
................后面的部分这里不写了

什么是HttpOnly ,HttpOnly最初是由微软提出的,并开始在IE6中使用,现在已经在各大浏览器中成为一个标准,  浏览器将禁止页面的JavaScript 访问带有HttpOnly属性的Cookie值。一个cookie的使用过程大致如下:

   第一步: 浏览器向服务器发起请求,这个时候没有产生Cookie值

   第二步:服务器返回时发送Set-Cookie ,并向客户端浏览器写入Cookie

   第三步:周该Cookie到期之前,浏览器访问该域下的所有页面,都将发送该Cookie。*

而HttpOnly设置在 Set-cookie标记。 我们可以同时设置多个Cookie值,对不同的Cookie。

Set-cookie:<name>=<value>[;<Max-Age>=<age>]
[;expirse=<data>][;domain=<domain_name>]
[;path=<some_path>][;secure][;HttpOnly]

 是不是加了 HttpOnly就读不出Cookie了不是这样的,我们还是可以通过其他的方法来,只要能力强,什么都可绕。安全是一个不断进阶的过程。添加了 HttpOnly不意味着完全可以避免XSS

二、 在防范XSS或者常见的SQl Injection漏洞的时候使用输入检查或者输出检查。

    输入检查的逻辑必须放在服务器端中实现,如果单单在客户端使用JS进行输入检查很容易被绕过,在开发过程中同时在客户端和服务端使用输入检查,客户端进行输入检查可以阻挡大部分的误操作,减少服务器的压力。

 XSS的本质是I一种“HTML注入” 用户的数据被当成了HTML代码一部分来执行,从而混淆了原本的语义,产生了一种新的语义。

三、跨站请求伪造 (CSRF)  Cross Site Request Forgery

       浏览器的Cookie分成两种类型。

    第一种 : Session Cookie 称为临时的Cookie  ,保存在浏览器进程的内存空间。

    第二种:  third-Part-cookie 又称为本地Cookie  ,保存在本地。

这两种Cookie的区别是 Session Cookie么有指定Expire时间,浏览器关闭之后Session Cookie会自动失效。  Third-Part-Cookie是服务器在Set-Cookie的时候指定了Expire时间,只有当Expire时间过期后Cookie才会失效。

posted @ 2020-07-01 11:09  疏桐  阅读(471)  评论(0编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();