SELECT PDO准备语句中的SELECT

拉杜·安德烈(Radu Andrei)

我在想这样的例子:

该请求使用参数点击网址(无论使用哪种方式)上的页面。example.com/api/page?name=bob据我了解,您应该准备一个准备好的语句来获取$_POST[name]参数,并确保它没有任何时髦,但这是通过对表达式进行求值来实现的。

我的第一个问题是:它是如何做到的(评估表达式)?

我的第二个问题是:如果用户沿着“ SELECT * FROM users”或“ DROP TABLE users”的行输入内容并传递给$_POST['name']参数(最后?name=bob是the),那该怎么办?

仅作为示例,最终查询将类似于

SELECT name, continent FROM world
WHERE continent IN
(SELECT continent FROM world WHERE name='Brazil')

第二个选择充当用户输入参数-因此$_POST['name']包含此查询SELECT continent FROM world WHERE name='Brazil'

最后,我要问的第三个问题是如何保护自己免受此类伤害?

我猜想PDO是专门为防止在query(?)中进行查询而设计的,但是经过一番阅读后,我还是很困惑。

我仍在学习所有这些内容,因此,如果我在查询中不清楚或不够具体,请告诉我,我将尝试解决。

编辑:要清除任何混乱,我在做什么是这样的:

$pdo = new PDO('..');
$sql = 'SELECT id FROM users WHERE username = :username';
$statement = $pdo->prepare($sql);
$statement->bindParam(':username', $_POST['username']);

问题是,如果$_POST['username']包含'SELECT * FROM users'(或任何其他查询)怎么办?prepare()工作如何我所描述的实际上可以存在安全漏洞吗?我需要一些帮助来理解这一点。

不在名单中

为了消除任何混乱,我在做什么:

$pdo = new PDO('..'); $sql = 'SELECT id FROM users WHERE username = :username'; $statement = $pdo->prepare($sql); $statement->bindParam(':username', $_POST['username']);

问题是,如果$ _POST ['username']包含“ SELECT * FROM users”(或任何其他查询)怎么办?

该查询将返回所有用户名为“ SELECT * FROM users”的用户的ID。

通过传递$ _POST ['username']作为参数,数据库知道$ _POST ['username']可能包含的任何字符串都不在查询中。这只是一个字符串。

由于不会执行该参数,因此可以防止SQL注入。这也意味着

SELECT name, continent FROM world WHERE continent IN (SELECT continent FROM world WHERE name='Brazil')

第二个选择充当用户输入参数-因此$ _POST ['name']包含此查询SELECT continent FROM world WHERE name ='Brazil'

将无法正常工作。因为您不能在参数中包含查询。可以,但是它们不会被执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在IF语句中具有多个条件的PDO MySQL SELECT

来自分类Dev

使用PDO在Select语句中选择多行

来自分类Dev

mysqli准备语句中带有fetch_array的SELECT语句

来自分类Dev

PDO SELECT语句故障

来自分类Dev

PHP MySQLi准备的语句-SELECT

来自分类Dev

PHP MySQLi准备的语句-SELECT

来自分类Dev

如何使用SELECT查询在准备好的语句中设置两个值?

来自分类Dev

MySQL Select 查询在终端中工作。在 php 准备好的语句中失败

来自分类Dev

在SELECT语句中绑定变量

来自分类Dev

select语句中的sql转换

来自分类Dev

Select语句中的列名无效

来自分类Dev

OData select语句中的别名

来自分类Dev

Select语句中的布尔逻辑

来自分类Dev

SELECT语句中的DATETIME函数

来自分类Dev

Select语句中的子查询

来自分类Dev

SELECT嵌套在WITH语句中

来自分类Dev

在select语句中设置变量?

来自分类Dev

WHERE子句中的Select语句

来自分类Dev

Select语句中的列名无效

来自分类Dev

SELECT语句中的sql concat

来自分类Dev

select语句中的行重复

来自分类Dev

遍历SELECT语句中的引用

来自分类Dev

select 语句中的存储过程

来自分类Dev

SELECT 语句中的 CakePHP TIMESTAMPDIFF

来自分类Dev

替换 select 语句中的值

来自分类Dev

在IF语句中包含SELECT语句结果

来自分类Dev

mysql-select语句中的if语句

来自分类Dev

Oracle中Case语句中的Select语句

来自分类Dev

mysql-select语句中的if语句