php - 如何保护 ODBC 查询免遭 SQL 注入(inject)

标签 php sql odbc

保护此查询免受 SQL 注入(inject)的最佳方法是什么? 这个例子只是一个例子,我在互联网上读过一些文章,但无法理解参数化查询。任何有用文章的链接都会获得投票,但我认为看到这个例子对我很有帮助。

$id = $_GET["id"];
$connection = odbc_connect("Driver={SQL Server};Server=SERVERNAME;Database=DATABASE-NAME;", "USERNAME", "PASSWORD");
$query = "SELECT id firstname secondname from user where id = $id";
$result = odbc_exec($connection, $query);
while ($data[] = odbc_fetch_array($result));
odbc_close($connection);

谢谢

编辑:我没有说得很明显,但我使用的是 SQL Server 而不是 mysql。 这只是一个例子,它并不总是我正在搜索的数字。 如果答案使用参数化查询(正如许多人建议的那样),并且对于所有查询都是相同的,而不是针对不同类型的用户输入进行不同类型的验证,那就太好了。

最佳答案

我认为PDO objects是最好的。

简而言之,以下是如何使用它们。

$databaseConnection = new PDO('mysql:host='. $host .';dbname=' . $databaseName, $username, $password);

$sqlCommand = 'SELECT foo FROM bar WHERE baz=:baz_value;';
$parameters = array(
    ':baz_value'    => 'some value'
);

$preparedStatement = $databaseConnection->prepare($sqlCommand);
$preparedStatement->execute($parameters);

while($row = $preparedStatement->fetch(PDO::FETCH_ASSOC))
{
    echo $row['foo'] . '<br />';
}

您为 SELECT 条件输入的值将替换为以冒号开头的参数(例如 :field_value)。然后,为参数分配一个数组中的值,并单独传递。

我认为这是处理 SQL 查询的更好方法。

参数与查询分开发送到数据库,并防止 SQL 注入(inject)。

关于php - 如何保护 ODBC 查询免遭 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310504/

相关文章:

PHP mysql - 如何根据分组的日期时间字段对行求和

php - 对表和元数据进行连接的 MySQL 搜索

sql - 如何计算运行 SUM?

C++ 使用 ODBC 绑定(bind)参数预先确定 VARCHAR 的长度

C#:DB2 首先测试可用连接

php - Cookie 与 MySQL 保存

Javascript根据日期显示

sql - 计算重复率队列的百分比

sql-server - freetds-dev 中缺少 libtdsodbc.so - Ubuntu 上的 MSSQL

php - 无法从 codeigniter 中的 bootstrap-wysiwyg 文本编辑器发布值