Cross-Site Scripting: DOM

Xss有经过后台,也有不经过后台的,在处理经过后台的Xss攻击时我们通过增加filter进行过滤,验证特殊字符、验证refer等方式,但是Dom型的xss参数的是不经过后台的,在后台处理没用。起初这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。前端的处理个人认为都是可以很容易骗过的,主要是后台的校验,既然出了这个问题,那处理方式有两种:

1、将所有输入全部转成字符串,进行编码

encodeURI(inputValue);  或者  改成innerText

2、对输入的字符串进行特殊字符过滤,存在特殊字符就进行无害化处理

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> Cross-Site Scripting: DOM </TITLE>
 </HEAD>


 <BODY>
  <div id = 'demo'> </div>
  <script>

	//Dom型的xss参数的是不经过后台的,在后台处理没用
  var  inputValue = '<script>document.getElementById("demo").innerHTML = 222 <\/script>';

  var element = document.getElementById('demo');
  //方式一,全部转成字符串
  //element.innerHTML = '1111' + encodeURI(inputValue);
  //方式一,全部转成字符串
  //element.innerText = '1111' + inputValue;
  //方式二,只检测部分特殊情况的字符串
  element.innerHTML = '1111' + filterJS(inputValue);


  //js检测
  function filterJS(param){
	var filteArr = 'script,alert';
	var splitArr = filteArr.split(',');
	for(var i=0;i<splitArr.length;i++){
		console.log(splitArr[i]);
		if(param.indexOf(splitArr[i])== -1){
			return param
		}else{
			return '*****';
		}
	}
  }
  </script>
 </BODY>
</HTML>

3、白名单

这种方式够安全,安全的不实用,基于B/S的架构,除非是固定IP段,否则客户端设置白名单还是放弃吧

猜你喜欢

转载自blog.csdn.net/myfmyfmyfmyf/article/details/121356850
今日推荐