php

位置:IT落伍者 >> php >> 浏览文章

php防止sql注入的函数介绍


发布日期:2019年10月19日
 
php防止sql注入的函数介绍

具体用法

addslashes防止SQL注入

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

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

另外对于php手册中get_magic_quotes_gpc的

举例

                        代码如下                                                   


            <?php      
            function post_check($post)   
            {   
            if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开   
            {   
            $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤   
            }   
            $post = str_replace("_" "_" $post); // 把 _过滤掉   
            $post = str_replace("%" "%" $post); // 把 % 过滤掉   
            $post = nlbr($post); // 回车转换   
            $post= htmlspecialchars($post); // html标记转换        
            return $post;   
            }   
            ?>

            

            

<?php         
            function inject_check($sql_str)   
            {   
            return eregi(select|insert|update|delete||   
            function verify_id($id=null)   
            {   
            if (!$id) { exit(没有提交参数!); } // 是否为空判断   
            elseif (inject_check($id)) { exit(提交的参数非法!); } // 注射判断   
            elseif (!is_numeric($id)) { exit(提交的参数非法!); } // 数字判断   
            $id = intval($id); // 整型化         
            return $id;   
            }   
            ?>

                        

string mysql_real_escape_string ( string $unescaped_string [ resource  $link_identifier ] )

本函数将 unescaped_string 中的特殊字符转义并计及连接的当前字符集因此可以安全用于 mysql_query()

Note: mysql_real_escape_string() 并不转义 % 和 _

mysql_real_escape_string

Example# mysql_real_escape_string() 例子

                        代码如下                                                   

<?php
            $item   =  "Zaks and Dericks Laptop" ;
            $escaped_item   =  mysql_real_escape_string ( $item );
            printf   ( "Escaped string: %sn"   $escaped_item );
            ?>

            

以上例子将产生如下输出

            

Escaped  string: Zaks and Dericks Laptop

                        

mysql_escape_string

本函数将 unescaped_string 转义使之可以安全用于 mysql_query()

注: mysql_escape_string() 并不转义 % 和 _

本函数和 mysql_real_escape_string() 完全一样除了 mysql_real_escape_string()  接受的是一个连接句柄并根据当前字符集转移字符串之外mysql_escape_string() 并不接受连接参数也不管当前字符集设定

例子 mysql_escape_string() 例子

                        代码如下                                                   

<?php
            $item  = "Zaks Laptop";
            $escaped_item  = mysql_escape_string($item);
            printf  ("Escaped string: %sn" $escaped_item);
            ?>
            输出
            Escaped  string: Zaks Laptop

                        

mysql_real_escape_string和mysql_escape_string这个函数的区别

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

我们可以利用判断来综合处理

                        代码如下                                        function  cleanuserinput($dirty){
            if  (get_magic_quotes_gpc()) {
            $clean  = mysql_real_escape_string(stripslashes($dirty));
            }else{
            $clean  = mysql_real_escape_string($dirty);
            }
            return  $clean;
            }            

总结一下

* addslashes() 是强行加;

* mysql_real_escape_string() 会判断字符集但是对PHP版本有要求;

* mysql_escape_string不考虑连接的当前字符集

               

上一篇:实测在class的function中include的文件中非php的global全局环境

下一篇:解析centos中Apache、php、mysql 默认安装路径