PHP从数据库读取时清理字符串

时间:2014-04-07 17:21:56

标签: php mysql security sql-injection

对于PHP来说,我有点像菜鸟,所以如果这是非常基本的话,请道歉。这个问题可能以前曾被问过,但是我无法找到另一篇与我相似的案例。 我网站上的URL示例是example.com/read.php?id=1。 read.php文件包含以下代码:

<?php
    $id = $_GET['id'];
    $sql = mysqli_query($con, "SELECT * FROM pages WHERE id='$id'");
?>

我知道我需要为此做一些卫生设施,但在这种情况下,最好的办法是什么?性能也很重要,所以我不想添加不必要的代码。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是将变量强制为整数。任何非数字都将被剥离,并且该值可以安全地用作数值。

$id = (int) $_GET['id'];
$sql = mysqli_query($con, "SELECT * FROM pages WHERE id=$id");

我同意其他评论者认为使用参数准备好的查询会更好(更快,更安全)。然后它看起来像这样:

$id = (int) $_GET['id'];
$stmt = mysqli_prepare($con, "SELECT * FROM pages WHERE id=?");
mysqli_stmt_bind_param($stmt, "i", $id);

答案 1 :(得分:0)

您可以使用filter_var()功能。可用的过滤器种类很多。

访问此链接:http://www.php.net/manual/en/filter.filters.php

你可以获得$ id并验证如下:

filter_var($id,FILTER_VALIDATE_INT);

上述函数将返回已过滤的数据,如果过滤器失败,则返回FALSE。 验证后,您可以使用预准备语句和PDO来完成工作。

准备好的陈述:

http://in2.php.net/manual/en/mysqli.prepare.php

对于PDO: http://in2.php.net/manual/en/book.pdo.php