SQL注入攻打是黑客攻打网站最罕用的手法。假如你的站点不应用严格的用户输出测验,那末常容易受到SQL注入攻打。SQL注入攻打通常经过给站点数据库提交没有良的数据或查问语句来完成,极可能使数据库中的纪录受到暴露,更改或被删除了。
为了避免SQL注入攻打,PHP自带一个性能能够对输出的字符串进行解决,能够正在较底层对输出进行平安上的初步解决,也即Magic Quotes。(php.ini magic_quotes_gpc)。假如magic_quotes_gpc选项启用,那末输出的字符串中的单引号,双引号以及其它一些字符前将会被主动加 上反斜杠/。
但Magic Quotes并非一个很通用的处理计划,没能屏蔽一切有潜正在风险的字符,而且正在许多效劳器上Magic Quotes并无被启用。以是,咱们还需求应用其它多种办法来避免SQL注入。
许少数据库自身就提供这类输出数据解决性能。例如PHP的MySQL操作函数中有addslashes()、 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的举例:
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 没有思考。
总结一下:
* 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视频教程
以上就是几个防SQL注入攻打函数的区分的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学 函数 SQL注入攻击