我该如何阻止mySql注入

时间:2013-05-18 13:12:22

标签: php mysql code-injection

我需要知道如何防止我们的数据库从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提前

3 个答案:

答案 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注入