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

标签 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'");
?>

我知道我需要对此进行某种清理,但在这种情况下最好的做法是什么?性能也很关键,所以我不想添加不必要的代码。

最佳答案

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

$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);

关于从数据库读取时PHP清理字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22919035/

相关文章:

mysql - 选择两个不同值中的最小值

linux - sudo su 给其他用户运行脚本

asp.net - 限制对 ASP.NET 站点上文件的公共(public)访问

php - 仅返回重复行中的一行

php - 确定数组中最长元素的长度(以字符为单位)的最佳方法是什么?

javascript - 在 Wordpress 中是否有更简单的方法为多个页面模板排队脚本?

security - 在 Google Apps 脚本中管理 API secret 的适当方法是什么?

php - 在 iframe 中隐藏 DIV

mysql - 从多个表中选择除某些列之外的多个列

mysql - 通过匹配多列从多个表中选择数据