.转义特殊字符unescaped,可以用0xbf27来代替单引号

时间:2020-01-05 04:33来源:美高梅手机游戏网站
第一个函数:mysql_escape_string 具体用法 mysql_real_escape_string (PHP 4 = 4.0.3, PHP 5, 注意:在PHP5.3中已经弃用这种方法,不推荐使用)mysql_escape_string -- 转义一个字符串用于 mysql_query addslashes防止

第一个函数:mysql_escape_string

具体用法

mysql_real_escape_string

(PHP 4 >= 4.0.3, PHP 5, 注意:在PHP5.3中已经弃用这种方法,不推荐使用) mysql_escape_string -- 转义一个字符串用于 mysql_query

addslashes防止SQL注入

mysql_real_escape_string - 转义特殊字符在一个SQL语句中使用的字符串

string mysql_escape_string ( string unescaped_string ) 本函数将 unescaped_string 转义,使之可以安全用于 mysql_query()。 注: mysql_escape_string() 并不转义 % 和 _。 本函数和 mysql_real_escape_string() 完全一样,除了 mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string() 并不接受连接参数,也不管当前字符集设定。

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

字符串 mysql_real_escape_string( 字符串 $ unescaped_string [, 资源 $ link_identifier])

第二个函数:mysql_real_escape_string
  mysql_real_escape_string(string,connection)

举例:

.转义特殊字符unescaped_string,考虑到当前字符集的连接,以便它是安全的放置在mysql_query它()。如果二进制数据将被插入,这个函数必须使用。

参数

 代码如下

调用MySQL的库函数mysql_real_escape_string,其中前添加反斜杠下列字符
此函数必须始终(少),用于制造的数据安全例外在发送查询到MySQL

描述

<?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 = nl2br($post); // 回车转换    
    $post= htmlspecialchars($post); // html标记转换        
    return $post;    
    }    
    ?>

nescaped_string

手机美高梅游戏网址 ,string

    该字符串转义。
link_identifier link_identifier

必需。规定要转义的字符串。

 <?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;    
    }    
    ?>

    The MySQL connection. MySQL的连接。 如果链接标识没有指定,最后一个环节开幕mysql_connect()函数假定。如果没有这样的链接被发现,它会尝试创建一个仿佛mysql_connect()函数是不带参数的要求。如果没有发现或连接建立一条E_WARNING级别的错误的产生。

connection

string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
本函数将 unescaped_string 中的特殊字符转义,并计及连接的当前字符集,因此可以安全用于 mysql_query()。

例子1简单mysql_real_escape_string()例子
<?php
// Connect
$link = mysql_connect ( 'mysql_host' , 'mysql_user' , 'mysql_password' )
OR die( mysql_error ());

可选。规定 MySQL 连接。如果未规定,默认使用上一个连接。  

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

// Query
$query = sprintf ( "SELECT * FROM users WHERE user='%s' AND password='%s'" ,
mysql_real_escape_string ( $user ),
mysql_real_escape_string ( $password ));
?>
例如#2例如SQL注入攻击
<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user=' { $_POST [ 'username' ]} ' AND password=' { $_POST [ 'password' ]} '" ;
mysql_query ( $query );

编辑:美高梅手机游戏网站 本文来源:.转义特殊字符unescaped,可以用0xbf27来代替单引号

关键词: