您现在的位置是:网站首页> php专栏 扩展知识

跨站脚本:反射型XSS

亦然2019-07-15 13:08:13扩展知识人已围观

简介跨站脚本(cross-site Scripting,xss)是一种经常出现在web应用程序上的安全漏洞,是由于web应用程序对用户的输入过滤不足产生的。攻击者利用网站漏洞把自己的脚本代码(html或javas代码)注入到网页当中,当其他用户浏览这个页面时,就会执行其中的恶意代码,从而对用户采取cookie资料盗取、会话劫持、钓鱼欺骗等攻击手段。

反射性XSS也被称为非持久性XSS。也就是说恶意代码并没有保存在目标网站,通过用户点击特定的恶意脚本链接,链接被打开后,才会执行恶意代码。

小例子:

<?php
//XSS反射型漏洞 
//变量直接输出没有过滤
echo $_GET['XSS'];
?>

在浏览器中访问这个文件时,加一个弹窗测试,看看结果怎么样

1.XSS危害

1、劫持Cookie,cookie中一般加密保存了用户的登录凭证,浏览器发起的所有请求都会自动带上,如果Cookie被盗取,也就是说用户不用通过密码而直接登录你的账户。

<script>alert(document.cookie);</script>
js
2、构建Get和Post请求,XSS可以在javascript中构建get或者post请求,来实现自己的攻击。
例如下面的一段代码:
var img =document.createElement(‘img’);
img.src=”http://blog.cccc.com?m=delete&id=212112”;
document.body.appendChild(img);
只要让用户执行这段脚本,就能发起get请求,攻击者通过XSS诱导用户来执行。

XSS的攻击过程都是在浏览器通过执行javascript脚本自动进行,缺少与用户交互的过程。例如在POST的请求中,如果需要输入验证码,Js代码无法解析验证码,攻击也就无法实现。但是针对验证码这种情况,如果XSS可以通过把验证码的图片发到远端攻击服务器,服务器解析验证码然后把结果返回给js代码,js获取后继续进行攻击,不过就是成本有点高。

2.XSS防御

1.给关键的cookie设置HttpOnly属性

//php中这样设置
setcookie('username','admin',time()+10*60,NULL, NULL, NULL, TRUE);

把cookie的第7个参数设置成TRUE,也可以在php.ini中把session.cookie_httponly 的值设为1或TRUE。cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性。

2.参数过滤

在表单和url提交前,客户端和服务端都有进行过滤。检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。严格控制输出。

可以利用以下函数进行过滤:

htmlspecialchars() 函数,把一些预定义的字符转换为HTML实体;

htmlentities() 函数,转换所有含有对应“html实体”的特殊字符,比如货币表示符号欧元英镑等、版权符号等;

strip_tags() 函数,去除字符串中的 HTML、XML 以及 PHP 的标签;

header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览;

urlencode() 函数,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符;

intval()函数用于获取变量的整数值。

很赞哦!()

亦然

亦然(共32篇文章)

愿你我既可以朝九晚五,也可以浪迹天涯;愿你我既可以拈花把酒,也能围炉诗书茶。