PHP 过滤表单提交特殊字符(防注入)

 更新时间:2016年11月25日 15:23  点击:1858
本文章来给大家总结一下在php中常用的一些防php注入,sql注入的一些方法介绍,在php中提供了htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_string等几个函数,有需要了解的朋友可参考。

下面针对常用表单特殊字符处理进行总结:

测试字符串:

 代码如下 复制代码

$dbstr='D:test
<a href="http://www.111cn.net">http://www.111cn.net</a>,天缘博客
'!='1' OR '1'
</DIV>
<script  language="javascript" type="text/javascript">alert("Fail");</script>


<?php echo "<br/>PHP OUTPUT"; ?>';

测试代码:

 代码如下 复制代码

 header("Content-Type: text/html; charset=UTF-8");
echo "------------------------------------------------------<br/>rn";
echo  $dbstr."<br/>rn------------------------------------------------------<br/>rn";
$str=fnAddSlashes($_POST['dd']);
echo $str."<br/>rn------------------------------------------------------<br/>rn";

$str = preg_replace("/s(?=s)/","\1",$str);//多个连续空格只保留一个
$str = str_replace("r","<br/>",$str);
$str = str_replace("n","<br/>",$str);
$str = preg_replace("/((<br/?>)+)/i", "<br/>", $str);//多个连续<br/>标签只保留一个

$str=stripslashes($str);
echo strip_tags($str)."<br/>rn------------------------------------------------------<br/>rn";
echo htmlspecialchars($str)."<br/>rn------------------------------------------------------<br/>rn";
echo htmlentities($str)."<br/>rn------------------------------------------------------<br/>rn";
echo mysql_escape_string($str)."<br/>rn------------------------------------------------------<br/>rn";

字符串包含:反斜杠路径,单双引号,HTML标记、链接、未封堵的HTML标记,数据库语法容错,JS执行判断,PHP执行判断,多个连续回车换行符和空格。其中有些概念有包含关系


二、表单提交数据处理
1、强制加入反斜线

由于有些主机默认开启魔术引用get_magic_quotes_gpc,有些可能关闭,所以在程序上最好一律强制加入反斜线,这样可以统一处理,字符涉及单引号、双引号和反斜线。

 代码如下 复制代码

function fnAddSlashes($data)
{
    if(!get_magic_quotes_gpc()) //只对POST/GET/cookie过来的数据增加转义
        return is_array($data)?array_map('addslashes',$data):addslashes($data);
    else
        return $data;
}

2、对特殊字符处理

以下是几个常用字符串处理,可以视具体情况取舍。由于上面已经对提交表单数据进行一次转义,所以如果需要对内容替换或过滤需要考虑addslashes对相关字符的影响,替换或查找时需考虑反斜杠的添加。其它字符替换不影响,比如rn替换。

A、多个连续空格只保留一个

 代码如下 复制代码

$data = preg_replace("/s(?=s)/","\1",$data );//多个连续空格只保留一个

B、回车换行替换成<br/>

 代码如下 复制代码
$data = str_replace("r","<br/>",$data );
$data = str_replace("n","<br/>",$data );

//html中默认<br>没封堵,xhtml中<br/>有封堵,建议使用<br/>,更多区别:

C、多个连续<br/>只保留一个

 代码如下 复制代码
$data = preg_replace("/((<br/?>)+)/i", "<br/>", $data );//多个连续<br/>标签只保留一个

 

D、全部过滤HTML标记

该方式是全部过滤潜在危险的标记,包括HTML、链接、未封堵HTML标记、JS、PHP。

使用函数strip_tags($data)

该函数使用后会过滤全部的HTML标记(包括链接)和PHP标记、JS代码等,其中链接会保留链接原文只是去除<a>标记和href部分内容,PHP标记和JS标记则会整体去除,包括中间的内容,如下图:

E、不过滤标记,只是把他们HTML化

该方法是把原提交内容全部按照普通文本来处理。

使用函数htmlspecialchars($data),该函数执行后会把提交数据全部按照普通文本来展示,如下图:

使用htmlentities函数执行结果(中文显示乱码):

三、写入数据库

由于使用addslashes($data)后对于高级的可信任用户可以直接写入数据库,但是addslashes无法拦截使用0xbf27代替的单引号,所以最好还是使用mysql_real_escape_string或mysql_escape_string进行转义,不过转义之前需先去除反斜杠(假设已默认开启addslashes)。

 代码如下 复制代码

function fnEscapeStr($data)

{

if (get_magic_quotes_gpc())
{
        $data= stripslashes($value);
}
$data="'". mysql_escape_string($value) ."'";
return $data;
}

$data=fnEscapeStr($data);

PHP通用防注入安全代码

 代码如下 复制代码
说明:
判断传递的变量中是否含有非法字符
如$_POST、$_GET
功能:
防注入
**************************/
//要过滤的非法字符
$ArrFiltrate=array(”‘”,”;”,”union”);
//出错后要跳转的url,不填则默认前一页
$StrGoUrl=”";
//是否存在数组中的值
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}
//合并$_POST 和 $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}else{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//验证开始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo “alert(/”Neeao提示,非法字符/”);”;
if (empty($StrGoUrl)){
echo “history.go(-1);”;
}else{
echo “window.location=/”".$StrGoUrl.”/”;”;
}
exit;
}
}
?>

/*************************
保存为checkpostandget.php
然后在每个php文件前加include(“checkpostandget.php“);即可

恶意刷新就是不停的去刷新提交页面,导致大量无效数据了,下面我们来总结一下php 防止恶意刷新页面方法总结 防止恶意刷页面的原理是

要求在页面间传递一个验证字符串,
在生成页面的时候 随机产生一个字符串,
做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。

点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。
在处理完成后将重新生成一个验证码,用于新页面的生成

 代码如下 复制代码

<?php
session_start();
$k=$_GET['k'];
$t=$_GET['t'];
$allowTime = 1800;//防刷新时间
$ip = get_client_ip();
$allowT = md5($ip.$k.$t);
if(!isset($_SESSION[$allowT]))
{
$refresh = true;
$_SESSION[$allowT] = time();
}elseif(time() - $_SESSION[$allowT]>$allowTime){
$refresh = true;
$_SESSION[$allowT] = time();
}else{
$refresh = false;
}
?>


ie6提交两次我也碰到过,大致是用图片代替submit时,图片上有个submit(),这样会提交两次,如果只是submit钮我没碰到过提交两次的情况。 现在整理一下:
方法基本上前面几位说得差不多
接收的页即2.php分为两部分,一部分处理提交过来的变量,一部分显示页面
处理变量完毕用header( "location: ".$_SERVER[ 'PHP_SELF '])跳转到自身页
本部分要做判断,如果没有post的变量就跳过。当然也可以跳到别的页面。
跳到别的页面返回时会有问题,建议做在一个php文件里。
如果上页穿过来得变量不符合要求可以强制返回 <script> history.go(-1); </script>
只说了一下大体思路,也许高手们不会遇到此类问题,可是并不是每个人都是高手。

 代码如下 复制代码

 

if(isset($_POST))

if(变量不符合要求)
<script> history.go(-1); </script>
else
操作数据
...
if(操作完成)
header( "location: ".$_SERVER[ 'PHP_SELF ']);
}
<script language= "JavaScript ">
<!--
 javascript:window.history.forward(1);
//-->
</script>

也可以利用COOKIE

 代码如下 复制代码

<?php
$c_file="counter.txt"; //文件名赋值给变量
if(!file_exists($c_file)) //如果文件不存在的操作
{
$myfile=fopen($c_file,"w"); //创建文件
fwrite($myfile,"0"); //置入“0”
fclose($myfile); //关闭文件
}
$t_num=file($c_file); //把文件内容读入变量
if($_COOKIE["date"]!="date(Y年m月d日)") //判断COOKIE内容与当前日期是否一致
{
$t_num[0]++; //原始数据自增1
$myfile=fopen($c_file,"w"); //写入方式打开文件
fwrite($myfile,$t_num[0]); //写入新数值
fclose($myfile); //关闭文件
//重新将当前日期写入COOKIE并设定COOKIE的有效期为24小时
setcookie("date","date(Y年m月d日)",time()+60*60*24);
}
?>

session

主页面文件 index.php 代码:

 代码如下 复制代码
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>通过session禁止页面刷新</title>
<style type="text/css">
<!--
.style1 {
font-size: 14px;
font-family: "华文仿宋";
font-weight: bold;
}
.style2 {font-family: "华文琥珀"}
-->
</style>
</head>
<body>
<?php
//使用文本存储数据
   if($_SESSION[temp]==""){
   if(($fp=fopen("counter.txt","r"))==false){ echo "打开文件失败!";
     }else{ $counter=fgets($fp,1024);   //读取文件中数据
     fclose($fp);                        //关闭文本文件
     $counter++;                         //计数器增加1
     $fp=fopen("counter.txt","w");       //以写的方式打开文本文件
 
     fputs($fp,$counter);                //将新的统计数据增加1
     fclose($fp);    }                   //关闭文
//从文本文件中读取统计数据
       if(($fp=fopen("counter.txt","r"))==false){echo "打开文件失败!";}else{
        $counter=fgets($fp,1024);
        fclose($fp);
           echo "数字计数器: " .$counter ; }   //输出访问次数
     $_SESSION[temp]=1; //登录以后,$_SESSION[temp]的值不为空,给$_SESSION[temp]赋一个值1
     }else{
     echo "<script>alert('您不可以刷新本页!!'); history.back();</script>";
     }
?>
<table width="300" border="0" cellpadding="0" cellspacing="0" background="images/141.jpg">
<tr>
    <td height="35" align="center"><span class="style1">通过session禁止页面刷新</span></td>
</tr>
<tr>
    <td height="40" align="center"><span class="style2">
      <?php if(($fp=fopen("counter.txt","r"))==false){echo "打开文件失败!";}else{
        $counter=fgets($fp,1024);
        fclose($fp);
           echo "网页访问量: " .$counter ; }   //输出访问次数?>
    </span></td>
</tr>
<tr>
    <td height="25" align="center">&nbsp;</td>
</tr>
</table>
</body>
</html>

counter.txt 文件为同目录下的记录登录数文件……
$counter=fgets($fp,1024);   为读取文件中 数值型值的方法(可包含小数点数值)……

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

打开magic_quotes_gpc来防止SQL注入

php.ini中有一个设置:magic_quotes_gpc = Off
  这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,
  比如把 ' 转为 '等,对于防止sql注射有重大作用。

     如果magic_quotes_gpc=Off,则使用addslashes()函数

另外对于php手册中get_magic_quotes_gpc的举例:

 代码如下 复制代码

if (!get_magic_quotes_gpc()) {

  $lastname = addslashes($_POST[‘lastname’]);

  } else {

  $lastname = $_POST[‘lastname’];

}

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:

mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

(1)mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集

使用方法如下:

 代码如下 复制代码

$sql = "select count(*) as ctr from users where username02.='".mysql_real_escape_string($username)."' and 03.password='". mysql_real_escape_string($pw)."' limit 1";


自定函数

 代码如下 复制代码


function inject_check($sql_str) {
    return eregi('select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);
}
 
function verify_id($id=null) {
    if(!$id) {
        exit('没有提交参数!');
    } elseif(inject_check($id)) {
        exit('提交的参数非法!');
    } elseif(!is_numeric($id)) {
        exit('提交的参数非法!');
    }
    $id = intval($id);
    
    return $id;
}
 
 
function str_check( $str ) {
    if(!get_magic_quotes_gpc()) {
        $str = addslashes($str); // 进行过滤
    }
    $str = str_replace("_", "_", $str);
    $str = str_replace("%", "%", $str);
    
   return $str;
}
 
 
function post_check($post) {
    if(!get_magic_quotes_gpc()) {
        $post = addslashes($post);
    }
    $post = str_replace("_", "_", $post);
    $post = str_replace("%", "%", $post);
    $post = nl2br($post);
    $post = htmlspecialchars($post);
    
    return $post;
}

总结一下:

* addslashes() 是强行加;

* mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
* mysql_escape_string不考虑连接的当前字符集。
dz中的防止sql注入就是用addslashes这个函数,同时在dthmlspecialchars这个函数中有进行一些替换$string = preg_replace(/&((#(d{3,5}|x[a-fA-F0-9]{4}));)/, &1,这个替换解决了注入的问题,同时也解决了中文乱码的一些问题。

网上生成php验证码程序用很多,下面我来给大家分享一款超不错的php验证码程序代码,有需要的朋友可参考。

验证码识别一般分为以下几个步骤:

1. 取出字模
2. 二值化
3. 计算特征
4. 对照样本

 代码如下 复制代码


function _code($_code_length = 4, $_width = 75, $_height = 25){
    for($i=0;$i<$_code_length;$i++){
        $_nmsg .= dechex(mt_rand(0,15));
    }
    $_SESSION["code"] = $_nmsg;

    $_img = imagecreatetruecolor($_width, $_height);

    $_white = imagecolorallocate($_img, 250, 250, 250);

    imagefill($_img, 0, 0, $_white);

    $_gray = imagecolorallocate($_img, 196, 196, 196);

    imagerectangle($_img, 0, 0, $_width-1, $_height-1, $_gray);

    for ($i=0; $i < 6; $i++) {
        $_md_color = imagecolorallocate($_img, mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
        imageline($_img, mt_rand(0,$_width), mt_rand(0, $_height),mt_rand(0,$_width), mt_rand(0, $_height), $_md_color);
    }

    for ($i=0; $i < 50; $i++) {
        $_md_color = imagecolorallocate($_img, mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
        imagestring($_img, 1, mt_rand(1,$_width-5), mt_rand(1, $_height-5), "*", $_md_color);
    }

    for ($i=0; $i < $_code_length ; $i++) {
        $_md_color = imagecolorallocate($_img, mt_rand(0,102), mt_rand(0,102), mt_rand(0,102));
        imagestring($_img, 5, $i * $_width/$_code_length+ mt_rand(1, 10), mt_rand(1, $_height/2), $_SESSION["code"][$i], $_md_color);
    }

    header("Content-Type:image/png");

    imagepng($_img);

    imagedestroy($_img);
}

验证码使用方法

 代码如下 复制代码

$getcode = $_POST['code'];

if( $_SESSION["code"] = $getcode )
{
  echo ' 验证合法,进入下一步';
  unset( $_SESSION["code"] );
}
else
{
  echo ' 验证码不正确';
  header('location:vial.php');
}

在网站开发中为了提供用户体验我们多数都使用ajax来做一些操作,下面我来介绍一个利用ajax实现无刷新页面的验证码ajax验证有需要的朋友可参考。

验证码生成程序我这里就不介绍了,大家可参考http://www.111cn.net/phper/phpanqn/46698.htm 下面介绍一个简单的

 代码如下 复制代码

<?php 
session_start();
//设置: 你可以在这里修改验证码图片的参数
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf'; 
 
//以下字符将用于验证码中的字符 
//为了避免混淆去掉了数字1和字母i
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 10;
$random_lines = 30;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864"; 
 
$code = ''; 
 
$i = 0;
while ($i < $characters_on_image) { 
    $code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
    $i++;
}
 
$font_size = $image_height * 0.75; 
$image = @imagecreate($image_width, $image_height);
 
/* 设置背景、文本和干扰的噪点 */
$background_color = imagecolorallocate($image, 255, 255, 255);
 
$arr_text_color = hexrgb($captcha_text_color); 
$text_color = imagecolorallocate($image, $arr_text_color['red'], 
$arr_text_color['green'], $arr_text_color['blue']);
 
$arr_noice_color = hexrgb($captcha_noice_color); 
$image_noise_color = imagecolorallocate($image, $arr_noice_color['red'], 
$arr_noice_color['green'], $arr_noice_color['blue']);
 
/* 在背景上随机的生成干扰噪点 */
for( $i=0; $i<$random_dots; $i++ ) {
    imagefilledellipse($image, mt_rand(0,$image_width),
    mt_rand(0,$image_height), 2, 3, $image_noise_color);
}
 
/* 在背景图片上,随机生成线条 */
for( $i=0; $i<$random_lines; $i++ ) {
    imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height),
    mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);
}
 
/* 生成一个文本框,然后在里面写生6个字符 */
$textbox = imagettfbbox($font_size, 0, $font, $code); 
$x = ($image_width - $textbox[4])/2;
$y = ($image_height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
 
/* 将验证码图片在HTML页面上显示出来 */
header('Content-Type: image/jpeg');
// 设定图片输出的类型
imagejpeg($image);
//显示图片
imagedestroy($image);
//销毁图片实例
$_SESSION['6_letters_code'] = $code;
 
function hexrgb ($hexstr) {
    $int = hexdec($hexstr);
 
    return array( "red" => 0xFF & ($int >> 0x10),
                "green" => 0xFF & ($int >> 0x8),
                "blue" => 0xFF & $int
    );
}
?>

验证码

生成后,我们要在实际的项目中应用,通常我们使用ajax可以实现点击验证码时刷新生成新的验证码(有时生成的验证码肉眼很难识别),即“看不清换一张”。填写验证码后,还需要验证所填验证码是否正确,验证的过程是要后台程序来完成,但是我们也可以通过ajax来实现无刷新验证。

验证验证码正确或错误的方法
验证码图片上的文字被存放到了SESSION 变量里面,验证的时候,我们需要将SESSION 里面的值和用户输入的值进行比较即可。

$_SESSION[6_letters_code] – 存放着验证码的文字值
$_POST[6_letters_code] – 这是用户输入的验证码的内容


我们建立一个前端页面index.html,载入jquery,同时在body中加入验证码表单元素:

 代码如下 复制代码

<p>验证码:<input type="text" class="input" id="code_num" name="code_num" maxlength="4" />  
<img src="code_num.php" id="getcode_num" title="看不清,点击换一张" align="absmiddle"></p> 
<p><input type="button" class="btn" id="chk_num" value="提交" /></p> 

html代码中,<img src="code_num.php"即调用了生成的验证码,当点击验证码时,刷新生成新的验证码:

 代码如下 复制代码

$(function(){ 
    //数字验证 
    $("#getcode_num").click(function(){ 
        $(this).attr("src",'code_num.php?' + Math.random()); 
    }); 
    ... 
}); 

刷新验证码,其实就是重新请求了验证码生成程序,这里要注意的是调用code_num.php时要带上随机参数防止缓存。接下来填写好验证码之后,点“提交”按钮,通过$.post(),前端向后台chk_code.php发送ajax请求。

 代码如下 复制代码

$(function(){ 
    ... 
    $("#chk_num").click(function(){ 
        var code_num = $("#code_num").val(); 
        $.post("chk_code.php?act=num",{code:code_num},function(msg){ 
            if(msg==1){ 
                alert("验证码正确!"); 
            }else{ 
                alert("验证码错误!"); 
            } 
        }); 
    }); 
}); 


后台chk_code.php验证:

 代码如下 复制代码

session_start(); 
 
$code = trim($_POST['code']); 
if($code==$_SESSION["helloweba_num"]){ 
   echo '1'; 

后台根据提交的验证码与保存在session中的验证码比对,完成验证。

[!--infotagslink--]

相关文章

  • php sql防注入以及 html 过滤安全函数

    方法一过滤html自定义函数 代码如下 复制代码 function ihtmlspecialchars($string) { if(is_array($string)) { foreach($string as $key =>...2016-11-25
  • C# XML字符串包含特殊字符的处理转换方法小结

    今天用C#输出XML文件时,发现报错,经过反复检查调试,发现是因为某处内容含有某些特殊字符,这些特殊字符是在XML里不被允许的...2020-11-03
  • 两种方法解决javascript url post 特殊字符转义 + & #

    本文主要介绍javascript使用url传值的时候数据丢失的问题,希望对大家有所帮助。...2016-04-16
  • php防注入过滤客户提交$_GET 和$_POST参数

    下面一款防止php页面给sql注入的一个程序代码,有需要的朋友可参考。 以下代码实现过滤php的$_GET 和$_POST参数 代码如下 复制代码 /** *...2016-11-25
  • c#转义字符串中的所有正则特殊字符方法示例

    这篇文章主要介绍了c#转义字符串中的所有正则特殊字符,大家可以参考使用...2020-06-25
  • 正则中需要转义的特殊字符小结

    正则表达式中的特殊字符,就是一些有特殊含义的字符,如“*.txt”中的*,简单的说就是表示任何字符串的意思...2021-05-07
  • 网站防注入与挂马 PHP.INI 安全设置

    当要在防止页面攻击时,可在页面的头部include防攻击文件,就像通用防注入文件。我们可以用三种情况来办到: 1、在每个文件内引用。这样的文件是可以,不过如果一个网站内有...2016-11-25
  • MySQL创建带特殊字符的数据库名称方法示例

    这篇文章主要给大家介绍了MySQL创建带特殊字符的数据库名称方法,文中给出了详细的示例代码,需要的朋友可以参考学习,下面来一起看看吧。...2017-03-14
  • url地址参数里带有?,&等特殊字符怎么办

    在使用url进行参数传递时,经常会传递一些 中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参 数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端java的encodeURI函数编码的URL,结果就不 一样。...2014-04-27
  • C#简单的特殊输出实例

    这篇文章主要介绍了C#简单的特殊输出,以实例实现了针对一些特殊字符与位置的输出控制,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery过滤特殊字符',防sql注入的实现方法

    下面小编就为大家带来一篇jquery过滤特殊字符',防sql注入的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24
  • Php $_POST、$_GET防注入程序

    这段程序代码是一款php $_POST、$_GET防注入程序哦,以前我们也写过很多sql防注入程序,下面来看看这款防注入的php代码吧。 <? /************************* 说明:...2016-11-25
  • PHP正则表达式中的特殊字符详解

    在php正则表达式中包括了大量的特殊字符,像有字符/,字符^,字符$,字符+ ,字符?,字符. ,字符x│y,字符{ n } 等等这些字符我们称作为特殊字符,因为它们不可以直接用平常的方法...2016-11-25
  • mysql密码中有特殊字符&在命令行下登录的操作

    这篇文章主要介绍了mysql密码中有特殊字符&在命令行下登录的操作,具有很好的参考价值希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • 经典php防注入函数代码

    <?php教程 /************************* 说明: 判断传递的变量中是否含有非法字符 如$_post、$_get 功能: 防注入 **************************/ //要过...2016-11-25
  • PHP防注入函数代码总结

    在php中防注入一般会写一个全局文件用来过滤特殊的字符串,本文章来总结了各种各样的php防注入函数代码,同时还可防sql注入大家可参考。 为了安全,我们常用到下面的函...2016-11-25
  • php sql注入与防注入经典案例分析

    对于sql注入与防注入其实就是一个攻与防的,今天我们要告诉大家最基本的注入和防止方法,原理都是利用了php或mysql的一些特性而我们没注意所造成的。 一个简单的SQL...2016-11-25
  • PHP简单处理表单输入的特殊字符的方法

    这篇文章主要介绍了PHP简单处理表单输入的特殊字符的方法,涉及PHP中trim(),strip_tags(),htmlspecialchars()及addslashes()等函数的使用技巧,需要的朋友可以参考下...2016-02-05
  • 5个对网页特殊限制设置的技巧

    1.网页不允许脱机浏览<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 2.文字不允许被打印<style>@media print {.notptn {display:none;}}</style><div class...2016-09-20
  • php防注入式攻击心得

    一: 这个话题太老生常谈了. 在PHP.INI中将magic_quotes_gpc = On 确实能防得住一些注入式攻击,但这是不是万能的? 我们现在是将POST或者GET收到的变量,将其...2016-11-25