Jquery中文网 新宝娱乐城官网 www.z5nka.com.cn
Jquery中文网 >  脚本编程  >  php  >  正文 php防止sql注入函数用法

新宝娱乐城骰宝:php防止sql注入函数用法

发布时间:2018-06-05   编辑:新宝娱乐城官网 www.z5nka.com.cn
本文介绍了php防止sql注入的一些函数,有关php防注入函数的用法,感兴趣的朋友参考下。

新宝娱乐城官网 www.z5nka.com.cn 在php中使用addslashes函数防止SQL注入。

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。

addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以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 = nl2br($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

例1,mysql_real_escape_string() 例子
 

复制代码 代码示例:
<?php
$item = "Zak's and Derick's Laptop" ;
$escaped_item = mysql_real_escape_string ( $item );
printf ( "Escaped string: %sn" , $escaped_item );
?>

输出:
Escaped string: Zak's and Derick's Laptop

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

例1. mysql_escape_string() 例子
 

复制代码 代码示例:
<?php
$item = "Zak's Laptop";
$escaped_item = mysql_escape_string($item);
printf ("Escaped string: %sn", $escaped_item);
?>
 

输出:
Escaped string: Zak's Laptop

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 不考虑。
可以利用判断来综合处理。

例子:
 

复制代码 代码示例:
<?php
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不考虑连接的当前字符集。

您可能感兴趣的文章:
php防止SQL注入的函数
php防止sql注入正则过滤一例
分享discuz的php防止sql注入函数
很好用的php防止sql注入漏洞过滤函数的代码
一段php过滤危险html的代码
php实现sql防止注入的几种方法
学习php的防SQL注入函数:mysql_real_escape_string
有关php中sql注入与XSS攻击的相关介绍
php防止sql注入的代码
简明易懂的php sql防注入代码

[关闭]
  • 如果浮躁,不妨读读铁路人坚守的故事 2018-12-11
  • 来看!十九大报告梳理哪家内容强 构思妙 2018-12-11
  • 大换血!勇士8人合同到期 若处理不好将影响霸主地位 2018-12-11
  • 美帝拉拢人民,才能反对共产党。 2018-12-10
  • 粽情粽意 传承文明———我们的节日2018端午节 2018-12-10
  • 都昌一代课教师无证上岗体罚学生? 县教体局称将辞退 2018-12-10
  • 四川乐山公开审理新型贩毒案 2018-12-09
  • 石泉男子独自养大两闺女 照料瘫痪老爸18年 2018-12-09
  • 星战外传再起——关于《游侠索罗》你应该知道的N件事 2018-12-08
  • 政坛当都大嘴巴战场啊?条条大路通大道! 2018-12-08
  • (原创)穿救生衣应成赛龙舟的标配 2018-12-08
  • 网友给四川省委书记、省长留言获回复 共计86条 2018-12-07
  • 建设工程质量管理条例 2018-12-07
  • “大地飞歌·2017”将于9月12日唱响 韩磊谭维维等加盟 2018-12-06
  • 三江源通天河流域发现两千年前岩画 2018-12-06
  • 86| 663| 112| 130| 614| 267| 880| 128| 474| 817|