本文目录一览:
- 1、如何正确防御xss攻击
- 2、如何防止xss攻击,需要过滤什么
- 3、如何在浏览器启用XSS筛选器
- 4、新手小白想学习渗透和网络安全,从哪里入手?
- 5、IE8中xss筛选器禁用后会有什么后果
- 6、在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攻击,需要过滤什么
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+11');
它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。
三、输出检查
大多人都知道输入需要做检查,但却忽略了输出检查。
1、在HTML标签中输出
如代码:
?php
$a = "scriptalert(1);/script";
$b = "img src=# onerror=alert(2) /";
?
div?=$b?/div
a href="#"?=$a?/a
这样客户端受到xss攻击,解决方法就是对变量使用htmlEncode,php中的函数是htmlentities
?php
$a = "scriptalert(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, "\"script123123;/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筛选器
从IE8开始就有XSS筛选器,主要用于防御反射型跨站攻击,且是默认开启的。但由于它那暴力的检测方式(正则匹配)经常会影响到网站的正常业务功能,我想受此困扰的人一定不少,所以我建议大家都把它给关了。
如果是站长请使用X-XSS-Protection响应头关闭:
X-XSS-Protection: 0;
X-XSS-Protection 是用于控制IE的XSS筛选器用的HTTP 响应字段头。
如果你没有权利更改网站设置,那么你可以:
打开IE-菜单栏-安全-Internet-自定义级别-脚本-启用XSS筛选器-关闭-确定.
新手小白想学习渗透和网络安全,从哪里入手?
基础到入门的学习路线
一、网络安全
网络基础
网络概述
(行业背景+就业方向+课程体系结构)
Vmware
IP地址的概述与应用
DOS命令与批处理
Windows服务安全
用户管理
破解系统用户密码
NTFS权限
文件服务器
DNS服务
DHCP服务
IIS服务
活动目录
域控管理
组策略(一)
组策略(二)
安全策略
PKI与证书服务
windows安全基线
Windows server 2003安全配置基线
阶段综合项目一
以太网交换与路由技术
回顾windows服务
OSI协议簇
交换机的基本原理与配置
IP包头分析与静态路由
分析ARP攻击与欺骗
虚拟局域网VLAN
VTP
单臂路由与DHCP
子网划分VLSM
高级网络技术
回顾
三层交换
ACL-1
ACL-2
网络地址转换
动态路由协议RIP
ipsec VPN
VPN远程访问
网络安全基线
Cisco基础网络设备安全配置基线
安全设备防护
防火墙原理及部署方式
防火墙高级配置
IDS
WAF
阶段综合项目二
二、服务安全
Linux安全运维
Linux操作系统介绍与安装与目录结构分析
Linux系统的基本操作与软件安装
Linux系统下用户以及权限管理
网络配置与日志服务器建立应急思路
建立php主页解析以及主页的访问控制
Nginx服务都建立以及tomcat负载均衡
iptables包过滤与网络地址转换
实用型脚本案例
阶段综合项目三
三、代码安全
前端代码安全
HTML语言
CSS盒子模型
JS概述与变量
JS数据类型
JS函数
程序的流程控制
条件判断与等值判断结构
循环结构
JS数组
数据库安全
sqlserver
access
oracle
mysql
后台代码安全
PHP基础
PHP语法
PHP流程控制与数组
PHP代码审计中常用函数
PHP操作mysql数据库
PHP代码审计(一)
PHP代码审计(二)
Python安全应用
初识python上篇
初识python下篇
基础进阶与对象和数字
字符串列表和元祖
字典条件循环和标准输入输出
错误异常函数基础
函数的高级应用和模块
面向对象编程与组合及派生
正则表达式和爬虫
socket套接字
四、渗透测试
渗透测试导论
渗透测试方法论
法律法规与道德
Web 工作机制
HTTP 协议
Cookie 与session
同源策略
情报收集
DNS
DNS 解析
IP 查询
主机测探与端口扫描
网络漏洞扫描
Web 漏洞扫描
其他工具
口令破解
口令安全威胁
破解方式
windows 口令破解
Linux 口令破解
网络服务口令破解
在线密码查询网站
常见的漏洞攻防
SQL 注入基础
四大基本手法
其他注入手法
SQLmap 的使用
XSS 漏洞概述
XSS 的分类
XSS的构造
XSS 的变形
Shellcode 的调用
XSS 通关挑战
实战:Session 劫持
PHP 代码执行
OS 命令执行
文件上传漏洞原理概述
WebShell 概述
文件上传漏洞的危害
常见的漏洞攻防
PUT 方法上传文件
.htaccess 攻击
图片木马的制作
upload-labs 上传挑战
Web容器解析漏洞
开源编辑器上传漏洞
开源CMS 上传漏洞
PHP 中的文件包含语句
文件包含示例
漏洞原理及特点
Null 字符问题
文件包含漏洞的利用
业务安全概述
业务安全测试流程
业务数据安全
密码找回安全
CSRF
SSRF
提权与后渗透
服务器提权技术
隧道技术
缓冲区溢出原理
Metasploit Framework
前言
urllib2
SQL 注入POC 到EXP
定制EXP
案例:Oracle Weblogic CVE2017-10271 RCE
案例:JBoss AS 6.X 反序列化
五、项目实战
漏洞复现
内网靶机实战
内网攻防对抗
安全服务规范
安全众测项目实战
外网渗透测试实战
六、安全素养
网络安全行业导论
网络安全岗位职责分析
网络安全法认知
网络安全认证
职业人素质
IE8中xss筛选器禁用后会有什么后果
浏览器会被遭到病毒的肆意攻击,安全性能大大降低。因此,日常需要将浏览器的xss筛选器进行开启,步骤如下:
1、打开浏览器并点击浏览器右上方的工具选项卡;
2、在它的下拉菜单栏中选择Internet选项;
3、进入后,属性中,选择右下方的自定义级别按钮;
4、紧接着,在出现的页面中选择启动XSS筛选器即可;
5、如果想关闭,则跟开启相反,选择相对应的禁用选项即可禁用了。
在xss中各种过滤的情况,在什么地方可能存在注入点
XSS注入的本质就是:某网页中根据用户的输入,不期待地生成了可执行的js代码,并且js得到了浏览器的执行.意思是说,发给浏览器的字符串中,包含了一段非法的js代码,而这段代码跟用户的输入有关.常见的XSS注入防护,可以通过简单的htmlspecialchars(转义HTML特殊字符),strip_tags(清除HTML标签)来解决,但是,还有一些隐蔽的XSS注入不能通过这两个方法来解决,而且,有时业务需要不允许清除HTML标签和特殊字符.下面列举几种隐蔽的XSS注入方法:IE6/7UTF7XSS漏洞攻击隐蔽指数:5伤害指数:5这个漏洞非常隐蔽,因为它让出现漏洞的网页看起来只有英文字母(ASCII字符),并没有非法字符,htmlspecialchars和strip_tags函数对这种攻击没有作用.不过,这个攻击只对IE6/IE7起作用,从IE8起微软已经修复了.你可以把下面这段代码保存到一个文本文件中(前面不要有空格和换行),然后用IE6打开试试(没有恶意代码,只是一个演示):+/v8+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-最容易中招的就是JSONP的应用了,解决方法是把非字母和数字下划线的字符全部过滤掉.还有一种方法是在网页开始输出空格或者换行,这样,UTF7-XSS就不能起作用了.因为只对非常老版本的IE6/IE7造成伤害,对Firefox/Chrome没有伤害,所以伤害指数只能给4颗星.参考资料:UTF7-XSS不正确地拼接JavaScript/JSON代码段隐蔽指数:5伤害指数:5Web前端程序员经常在PHP代码或者某些模板语言中,动态地生成一些JavaScript代码片段,例如最常见的:vara='!--?phpechohtmlspecialchars($name);?';不想,$name是通过用户输入的,当用户输入a’;alert(1);时,就形成了非法的JavaScript代码,也就是XSS注入了.只需要把上面的代码改成:vara=