不要直接访问超全局 $_REQUEST 数组

Do not Access Superglobal $_REQUEST Array Directly

到目前为止,我一直在我的 PHP 中访问 $_REQUEST,如下所示:

//JS
xmlhttp.open("GET", "logic.php?q=" + itemOne  + "&w=" + itemTwo, true);

//PHP
$q = $_REQUEST['q'];
$w = $_REQUEST['w'];

通过 MSSQL 服务器查询发送的项目 (SQLSRV)。

我的问题是执行上述操作的最佳实践方法是什么differently/correctly?我在某处读到这在易受攻击方面并不好SQL 注入攻击等

My question is what would be the best-practice methods for doing the above differently/correctly?

您提供的示例 JavaScript 使用了 GET 请求。 "correct" 访问参数的方法是通过 PHP 的 $_GET 数组。使用 $_REQUEST 是一个坏习惯,因为您无法控制数据的到达方式。我给你举个简单的例子:

使用基于令牌的身份验证的网站通常要求您将令牌作为 POST 数据发送。如果通过 URL 参数交换私人信息被认为是不安全的,从 $_REQUEST 获取数据的 PHP 脚本无法知道数据是如何到达的,并且会错误地接受一个错误的发送令牌。更好的脚本会在 $_POST 中查找令牌。如果不存在,则没有令牌;即使用户试图在 url.

中发送它

I read somewhere that this is not good in terms of being vulnerable to SQL injection attacks etc.

SQL 注入与 $_REQUEST 无关。每当您直接在 SQL 查询中插入用户提交的数据时,无论数据是否来自 $_REQUEST$_GET、文件...这种可怕的代码设计都会让攻击者采取控制你的 SQL 并指示你的数据库执行他或她希望的任何命令(例如:泄露或删除你的数据)。为了保护自己免受它的侵害,请了解 准备好的语句 参数化查询