Heim > Backend-Entwicklung > PHP-Tutorial > 请问一上,为什么说Mysql预处理可以防止SQL注入呢?

请问一上,为什么说Mysql预处理可以防止SQL注入呢?

WBOY
Freigeben: 2016-06-13 10:32:47
Original
1115 Leute haben es durchsucht

请教一下,为什么说Mysql预处理可以防止SQL注入呢???
比如:

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  $link = new Mysqli('localhost', 'root', '111111', 'test');  $link -> set_charset('utf8');  $sql = 'SELECT * FROM test WHERE id=? AND name=?';  $stmt = $link -> prepare($sql);  $stmt -> bind_param('is', $id, $name);  $stmt -> execute();
Nach dem Login kopieren


就上面这个例子来说,我的理解是:
Mysql在真正执行前,就已经定死了SQL语句中“?”号所代表的类型值。
所以,如果给id位置处的“?”传字符串值,它也会转成整型,这样就防止了SQL注入。

但是,name处的“?”,本来传递的就应该是字符串,那如果要是传给它一个SQL注入的语句,还怎么防止SQL注入呢?

不知道我的理解对不对,请大家指教!谢谢!!

------解决方案--------------------
addslashes()
------解决方案--------------------
prepare预处理的实现过程其实就是内部转义的过程,将一些需要转义的字符进行转义,你是看不见的,就如同你自己封装了一个转义方法相似,如果不预处理而是直接执行,那么是没有转义这一步骤的,因此增加了危险系数
------解决方案--------------------
探讨

引用:

prepare预处理的实现过程其实就是内部转义的过程,将一些需要转义的字符进行转义,你是看不见的,就如同你自己封装了一个转义方法相似,如果不预处理而是直接执行,那么是没有转义这一步骤的,因此增加了危险系数

是像楼上是的用个addslashes(),或者mysql_escape_string()吗?

------解决方案--------------------
养成习惯,不懂的问题问php.net,实在找不到再来问论坛。

结论就是你不用addslashes,你的sql语句里的?也不用''包围,prepare全自动的'addlashes()'。
------解决方案--------------------
$v = ( is_int( $v ) ? $v : "'".pg_escape_string( $v )."'" );
LZ跟我用的是一样的 都是用?占位符方式。

? 跟值一一对应,在查询之前依次替换,这个时候 整形的 用is_int ,字符串就用 pg_escape_string()
pg_escape_string() 转义 text/char 数据类型的字符串,返回转义后的字符串。建议用此函数替代 addslashes()。(我用pgsql数据库)进行转义。

$real_sql .= preg_replace('/\?/', $v, $sql_arr[$key],1); 这是?的替换。
------解决方案--------------------
mysql_escape_string 用这个接受用户 或者自己写个过虑用户传来的值基本就可以防止sql注入了
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage