ai didi

PHP:filter_var 清理是否足够安全?

转载 作者:可可西里 更新时间:2023-10-31 22:49:49 24 4
gpt4 key购买 nike

我有一个包含以下行的 PHP 脚本:

$query = "SELECT * FROM products WHERE product_id='" . filter_var($_GET[id], FILTER_SANITIZE_NUMBER_INT) . "'";

这样够安全吗?您将如何改进此代码?

最佳答案

在这种情况下是安全的,但对于更通用的方法,我宁愿将 mysql_real_escape_string 与类型转换结合使用:

$query = "SELECT * FROM products WHERE product_id='" . (int)mysql_real_escape_string($_GET['id']) . "'";

在最坏的情况下,这将导致 0 并且还会逃避所有恶意输入。 mysql_real_escape_string 可用于所有类型的数据以确保查询安全,这使其成为所有转义/清理函数中用途最广泛的。

无需使用准备好的语句,您可以使用 sprintf 创建 SQL 并自动处理类型转换:

$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", mysql_real_escape_string($_GET['id']));

参见 sprintf PHP 手册中的语法条目。

如果您使用 array_map 转义所有 $_GET$_POST 变量,它会变得更简单,然后您可以按原样使用它们:

$_GET = array_map('mysql_real_escape_string', $_GET);
$_POST = array_map('mysql_real_escape_string', $_POST);

$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", $_GET['id']);

关于PHP:filter_var 清理是否足够安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2005140/

24 4 0
文章推荐: node.js - 如何使用 Node.js net.Socket 像使用终端一样与 Postgresql 数据库通信
文章推荐: html - 如何避免与每行的第一个 div 间隔
文章推荐: php - 错误 : Unable to find the controller for path "/login_check". 路由配置错误。 (LexikJWTAuthentication)
文章推荐: php - 在内部表示配置选项的最佳方式是什么?
可可西里
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com