Linux 拨号vps windows公众号手机端

如何防范网站二次循环漏洞

lewis 7年前 (2018-11-26) 阅读数 9 #VPS/云服务器

防范网站二次循环漏洞的示例:

PHP对MySQL的操作简单产生二次漏洞的防范方案,用str_replace()函数依次对必要的特殊字符进行替换,代码如下:

<?php

/*

*二次漏洞简单检测

*/

/*

*链接数据库(根据情况自己修改)

*/

$Host='localhost';

$User='root';

$Pass='password';

$DB='test';//测试库名

$db=@mysql_connect($Host,$User,$Pass);

if(!$db)die("连接服务器MySQL出错!");

elseif(!mysql_select_db($DB,$db))die("连接数据库出错!");

define(INPUT_MAX_LENGTH,10);//前台maxlength值(初步检测)

define(INDB_MAX_LENGTH,20);//数据库中字段设置的大小值(用于写入前的必要安全测试)

/*

*原始数据(如用户输入等)

*/

$string="’//";//用户输入内容

if(strlen($string)>INPUT_MAX_LENGTH)//初步检测

die("输入内容超长");

echo"输入的内容:".$string;

/*

*过滤方案

*/

//$string_in1=AddSlashes($string);//方案一:临时失去危险,但有二次漏洞

$string_in1=str_slashes($string);//方案二:永久性失去危险!(自定义函数)

/*

*安全测试

*/

$string_in2=test_db($string_in1,1);//一次漏洞检测

$string_in3=test_db($string_in2,2);//二次漏洞检测

/*

*数据库操作(函数)

*/

functiontest_db($str_in,$time)

{

echo"第$time次要写入的内容:".$str_in;

if(strlen($str_in)>INDB_MAX_LENGTH)die("第$time次写入数据超长!");//必要安全测试!

$result=mysql_query("INSERTINTOstr(str)VALUES('$str_in')");//写入

if(!$result)

{

die("<fontcolor=red>第$time次写入数据库失败</font>");

}

echo"第$time次写入完毕";

$result=mysql_query("SELECTstrFROMstrORDERBYidDESCLIMIT1");//取出

if($item=mysql_fetch_array($result))

{

$str_out=$item['str'];

}

echo"第$time次输出:".$str_out."";

return$str_out;

}

/*

*永久性过滤危险字符

*/

functionstr_slashes($str)

{

$str=str_replace("'","'",$str);//转译'

$str=str_replace("//","/",$str);//转译/

return$str;

}

?>


版权声明

本文仅代表作者观点,不代表米安网络立场。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门