-1

我需要知道如何防止我们的数据库注入 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'";

那么我应该怎么做才能防止我的数据库注入.....任何想法都会受到高度赞赏..提前谢谢

4

3 回答 3

2

如果您非常了解以下代码,那么将其转换为 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'";

到 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() next 中一样,execute()这实际上执行了您的代码,这意味着您的所有 sql 查询都准备好然后执行,一个接一个地使 sql 注入几乎不可能,成为。

如果您想了解 PDO http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers ,这是一个基本且很好的教程

于 2013-05-18T13:16:53.650 回答
1

by using stored procedures instead of direct queries , you may prevent your system from sql injections

于 2013-05-18T13:19:29.863 回答
1

您应该使用 PDO 有几个原因:

1)它有参数化查询,所以没有sql注入

2) PHP 的 mysql 函数从 PHP 5.5.0 开始被贬值

于 2013-05-18T13:16:27.103 回答