开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
反射型
1.Xss漏洞代码
(1)为什么会存在反射型xss?
没有对输入的内容进行判断过滤,导致了插入的javascript语句能够被浏览器直接执行!
(2)什么样的代码会存在反射型的xss?
那就看看后台使用到前台输入的内容有没有对输入内容进行过滤!
2.前台代码html
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>反射型xss测试页面</title>
</head>
<div >
<form name="xx" action="fanshe_xss.php" method="GET">
<p>输入你的名字</p>
<input type="text" name="name">
<input type="submit" value="提交">
</form>
</div>
</html>
3.后台对前台传入的参数的使用
http:xxx:800/xsszhuanxiang/fanshe/fanshe_xss.php?name=xxx
<?php
if(!array_key_exists (“name”, $_GET) || $_GET[‘name’] == NULL || $_GET['name'] == ‘’){
$isempty = true;
} else {
echo '<pre>’;
echo 'Hello ' . $_GET['name’];
echo '</pre>';
}?>
4.反射型xss漏洞修复方案
1、插入拦截器,对输入内容进行过滤。
2、采用安全的API。
5.str_replace方法介绍
6.反射型xss漏洞修复方案
1、插入拦截器,对输入内容进行过滤。
str_replace('<script>', '', $_GET['name']);
2.采用安全的API
htmlspecialchars($_GET['name']);
htmlspecialchars定义和用法
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
DOM型
1.DOM型xss和反射型xss有什么区别呢?
1、我们可以认为DOM型XSS是反射型XSS的其中一种! 2、DOM型XSS除了和反射型XSS原理一样外,它还要利用到页面的DOM标签!
2.DOM型XSS代码
<?php
error_reporting(0);
$name = $_GET["name"];
?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript">
var text = document.getElementById("text");
var print = document.getElementById("print");
print.innerHTML = text.value;
</script>
3.DOM型xss漏洞修复方案
存储型
1.存储型XSS与反射型XSS有什么区别?
1、存储型XSS是持久化,反射型式非持久化。
2、危害更大
2.前台代码html
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>存储型xss测试页面</title>
</head>
<div >
<form name="xx" action="store.php" method="GET">
<p>填写你的个人信息</p>
<tr><td>姓名:<td><td><input type="text" name="name"></td></tr><br>
<tr><td>爱好:<td><td><input type="text" name="interest"></td></tr>
<br>
         
<input type="submit" value="提交">
</form>
<form name="xx" action="find_store.php" method="GET">
<p>查询个人信息</p>
<tr><td>姓名:<td><td><input type="text" name="name"></td></tr><br>
<br>
         
<input type="submit" value="查询">
</form>
</div>
</html>
3.保存提交信息
<?php
error_reporting(0);
$name = $_GET["name"];
$interest = $_GET["interest"];
//连接服务器
$conn = mysql_connect("127.0.0.1","root","root");
//打开数据库
mysql_select_db("xss",$conn);
//执行SQL
mysql_query("set names 'utf8'");
$sql_insert = "insert into xss(name,interest) values('$name','$interest')";
$result = mysql_query($sql_insert,$conn);
echo 'success!!';
?>
4.查询信息
<?php
error_reporting(0);
$name = $_GET["name"];
//连接服务器
$conn = mysql_connect("127.0.0.1","root","root");
//打开数据库
mysql_select_db("xss",$conn);
//执行SQL
mysql_query("set names 'utf8'");
$sql_select = "select * from xss where name like '%".$name."%'";
$results = mysql_fetch_array(mysql_query($sql_select));
?>
<html>
<?php echo $results[name].'<br>';
echo $results[interest];
?>
</html>
5.str_replace、 mysql_real_escape_string方法介绍
6.存储型xss漏洞修复方案
1、插入拦截器,对输入内容进行过滤。
str_replace('<script>', '', $_GET['name’]);
str_replace('<script>', '', $_GET['interest’]);
$name = mysql_real_escape_string($name);
2、采用安全的API
htmlspecialchars($_GET['name']);
$name = mysql_real_escape_string($name);
htmlspecialchars定义和用法 htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。 预定义的字符是: & (和号)成为 & " (双引号)成为 " ' (单引号)成为 ' < (小于)成为 <
(大于)成为 > 3、将输出的内容进行过滤。
str_replace('<script>', '', $_GET['name’]);
htmlspecialchars($_GET['name']);