【安全牛学习笔记】存储型XSS漏洞原理及修复方法
来源:互联网 发布:网络发帖推广怎么发 编辑:程序博客网 时间:2024/06/07 18:26
存储型 XSS
漏洞的原理及修复方法
1.常见的触发场景
2.漏洞原理
3.漏洞危害
4.一些tips
5.如何避免&修复漏洞
www-data@w:~/controller$ vim missionController.class.php
<?php
class missionController extends baseController{
public $var;
public function __construct(){
parent::__construct();
if($this->loged){
return;
}else{
header('Location: /index.php');
exit();
}
}
public function feedAction(){
$missionModel = new missionModel();
$feeds = $missionModel->get();
$url = '/index.php?c=mission&a=feed';
$username = $this->username;
require('tpl/feed.tpl');
}
public function feedApiAction(){
//permission check
$id = request('id');
$sid = request('sessionid');
$userModel = new userModel();
$userInfo = $userModel->getUserInfo($id,$sid);
$role = $userInfo['role'];
$feeds = array();
$callback = request('callback');
if($role == 1){
$missionModel = new missionModel();
$feeds = $missionModel->getMost($this->id);
$feeds = json_encode(array('email'=>$this->username,'count'=>$feeds[0]));
header("Content-Type: application/json");
echo ' '.$callback.'('.$feeds.')';
}else{
echo $callback.'('.json_encode($feeds).')';
}
}
public function missionAddAction(){
$referer = $_SERVER['HTTP_REFERER'];
$hostname = parse_url($referer,PHP_URL_HOST);
if($hostname !== 'paper.com' && $hostname !== 'csrf.com'){
die('csrf');
}
$missionModel = new missionModel();
$missionUrl = request('missionUrl');
$missionContent = request('missionContent');
$missionModel->add($this->id,$this->username,$missionUrl,$missionContent);
$count = 1;
if($count > 0){
$this->json(array('result'=>0,'message'=>'add mission ok'));
}else{
$this->json(array('result'=>1,'message'=>'add mission wrong'));
}
}
public function deleteAction(){
$missionId = request('missionId');
$missionModel = new missionModel();
$missionModel->delete($missionId,$this->id);
header('Location: /index.php?c=mission&a=feed');
}
public function testDeleteAction(){
echo 'testDeleteAction';
}
public function evalAction(){
$param = request('param');
$a = 0;
eval("\$a = $param;");
echo $a;
}
public function preg_replaceAction(){
$param = request('param');
$result = preg_replace("/(.*)/e",'$var = \'\\1\';',$param);
echo $result;
}
public function add(){
$this->id;
}
}
--------------------------------------------------------------------------------
?php
class missionModel extends baseModel{
public function __construct(){
parent::__construct();
}
public function get(){
$sql = 'select id,username,url,content,time from mission order by id desc';
$db_prepare = $this->conn->prepare($sql);
$db_prepare->execute(array());
$result = $db_prepare->fetchAll();
return $result;
}
public function getMost($uid){
$sql = 'select count(*) from mission where uid=?';
$db_prepare = $this->conn->prepare($sql);
$db_prepare->execute(array($uid));
$result = $db_prepare->fetch();
return $result;
}
public function add($uid,$username,$missionUrl,$missionContent){
$sql = 'insert into mission(uid,username,url,content,time) values(?,?,?,?,?)';
$db_prepare = $this->conn->prepare($sql);
$time = unixTime();
$db_prepare->execute(array($uid,$username,$missionUrl,$missionContent,$time));
return ;
}
public function delete($id,$uid){
$sql = 'delete from mission where id=? and uid=?';
$db_prepare = $this->conn->prepare($sql);
$db_prepare->execute(array($id,$uid));
return;
}
}
---------------------------------------------------------------------------------
用户可以提交自己的内容到web server端
其他用户可以浏览之前用户产生的内容
<script>alert(0)</script>
漏洞原理:
将A用户提交给 web server 的数据存储到数据库,其他用户访问这些数据的时候,没有做转义||编码。将数据直接输出到浏览器,导致而已用户可以插入任意的 html 代码 || javascript 代码
mysql> select * from mission
www-data@w:~# cd /tpl
www-data@w:~/tpl$ ls
dom.tpl feed.tpl index.js jsohijack.tpl stroeEdit.tpl style.css
feedAdd.tpl footer.tpl indexPDO.tpl reflectResult.tpl stroe.tpl userIndex.tpl
feeds.tpl head.tpl index.tpl search.tpl stroeView.tpl
---------------------------------------------------------------------------------
www-data@w:~/tpl$ vim feeds.tpl
<div class="media">
<a class="media-left media-middle" href="#">
<img data-holder-rendered="true" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGRlZnMvPjxyZWN0IHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0iI0VFRUVFRSIvPjxnPjx0ZXh0IHg9IjEyLjk1ODMzMzk2OTExNjIxMSIgeT0iMzIiIHN0eWxlPSJmaWxsOiNBQUFBQUE7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LWZhbWlseTpBcmlhbCwgSGVsdmV0aWNhLCBPcGVuIFNhbnMsIHNhbnMtc2VyaWYsIG1vbm9zcGFjZTtmb250LXNpemU6MTBwdDtkb21pbmFudC1iYXNlbGluZTpjZW50cmFsIj42NHg2NDwvdGV4dD48L2c+PC9zdmc+" style="width: 75px; height: 75px;" data-src="holder.js/75x75" alt="75x75">
</a>
<div class="media-body">
<h4 class="media-heading">user:<a href="" class="mission-username"><?php echo $mission_username; ?></a></h4>
<p class="mission-url">url:<?php echo $mission_url; ?></p>
<p class="mission-content">content:<?php echo htmlspecialchars($mission_content); ?></p>
<p class="mission-time">time<?php echo $mission_time; ?></p>
<p class="mission-delete"><a href="<?php echo $delete; ?>">delete</a></p>
</div>
</div>
---------------------------------------------------------------------------------
漏洞危害:
在任意用户的浏览器内执行任意js代码,可以伪装用户在网站发起任操作,比如发消息,转账等操作,在ugc社区还可以造成xss蠕虫,比如myspace的蠕虫,新浪微博蠕虫,百度贴蠕虫等。
浏览器将用户产生的js代码当做web server的代码而解析执行了,->就会避免xss漏洞。
htmlspecialchars
html实体编码:有些字符预留的字符串
- 【安全牛学习笔记】存储型XSS漏洞原理及修复方法
- 【安全牛学习笔记】反射型XSS攻击漏洞的原理及解决办法
- 存储型xss漏洞的探测方法
- 通过DVWA学习存储型XSS漏洞
- 【安全牛学习笔记】基于PHP的SQL注入漏洞原理及解决办法
- 【安全牛学习笔记】CSRF跨站请求伪造攻击漏洞的原理及解决办法
- XSS漏洞原理及理解
- 【安全牛学习笔记】存储型XSS和BEEF浏览器攻击框架
- 【安全牛学习笔记】初识sql注入漏洞原理
- 【安全牛学习笔记】初识sql注入漏洞原理
- 【安全牛学习笔记】初识sql注入漏洞原理
- 一次解决存储型xss和csrf漏洞的简单方法
- XSS漏洞修复
- xss漏洞修复
- 安全测试学习之XSS漏洞测试
- 【安全牛学习笔记】XSS的利用
- 【安全牛学习笔记】XSS的简述
- 【安全牛学习笔记】xss跨站
- 从零开始···spring整合redis配置
- 106 定积分习题复习及应用(本系列课程上册圆满结束)
- Java中的位运算符
- 面向接口编程 二
- jquery的一些事
- 【安全牛学习笔记】存储型XSS漏洞原理及修复方法
- 关于import与import...as与from...import
- 关于Android studio 的模拟器的问题
- JAVA中分为基本数据类型及引用数据类型
- 使用CSS实现三栏自适应布局(两边宽度固定,中间自适应)
- Cisco路由器配置Ipsec
- html中设计用户登录界面
- maven详解-(5)jar包依赖案例
- 来一起愉快的开始Python吧