我需要知道如何防止我们的数据库从sql注入,我读了很多博客并在互联网上回答,但无法证明我应该更喜欢或最好的方式。 就像mysql一样:
mysqli:
mysql_real_escape_string.
或使用
Using PDO:
我知道如果用户在数据库中插入它会变得容易受到SQL注入攻击,我通常会使用此代码进行插入:
<?php
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$foo=$_POST['foo'];
$boo=$_POST['boo'];
$insert="insert into table set foo='$foo',boo='$boo'";
那么我应该怎么做以防止我的数据库注入.....任何想法将得到高度赞赏.. Thanx提前
答案 0 :(得分:2)
如果您非常了解下面的代码,那么将其翻译为PDO就像:
FROM SQL Code:
<?php
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$foo=$_POST['foo'];
$boo=$_POST['boo'];
$insert="insert into table set foo='$foo',boo='$boo'";
到PDO代码:
<?php
$con= new PDO('mysql:host=localhost; dbname=xxxx', 'username', 'password')
$stmt = $con->prepare('INSERT INTO Table (foo, boo) VALUES (?,?)');
$stmt->execute(array($_POST['foo'], $_POST['boo']))
PDO可以帮助您准备查询,然后执行不同于mysql,它在同一个实例中完成所有操作。
现在,$con = new PDO()
非常类似,mysql_connect()
和mysql_select_db()
会打开连接。
$stmt
是一个变量,它将返回的查询与$result
中的$result = mysql_query()
保持一致
接下来是execute()
这实际上执行了你的代码,这意味着所有你的sql查询都准备好然后执行,一个接一个地使sql注入几乎不可能,是。
如果您想了解PDO,这是一个基本且好的教程 http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
答案 1 :(得分:1)
您应该使用PDO有以下几个原因:
1)它有参数化查询所以没有sql注入
2)自PHP 5.5.0起,PHP的mysql函数已被折旧
答案 2 :(得分:1)
使用stored procedures代替直接查询,可能会阻止系统进行sql注入