xss漏洞安全编码系列详解

450 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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>
			&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
			<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>
			&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
			<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']);