gpt4 book ai didi

php - MYSQL二阶攻击问题

转载 作者:可可西里 更新时间:2023-10-31 23:43:21 25 4
gpt4 key购买 nike

现在我正在使用准备好的语句来选择/插入数据到 mysql。好的,我的问题是我发现了有关二阶攻击的信息。例如,用户在我的网站上注册。并使用像这样的电子邮件或用户名

"username '; DELETE Orders;--"

这会插入到 mysql 表中

因此,当我通过准备好的语句再次接收数据时,并在准备好的语句中再次插入/执行某些操作。

我会很安全,因为我使用准备好的语句吗?

示例:

Get Bad Data:

$sql = "SELECT * FROM USERS where USERID = 1";
...
$stmt->bind_result($username);
...

Next Query:
INSERT or do other things:
$SQL = "SELECT * FROM email WHERE USERNAME = ?";
....
$stmt->bind_param('s', $username);
...

经过我的思考,如果我这样做,我会安全吗?或者是否有可能泄漏?

但如果我这样做的话,我会受到攻击:

$sql = "SELECT * FROM email WHERE username = $username";
$stmt = $mysqli->prepare($sql);
$stmt->execute();

谢谢:-)

最佳答案

只要占位符始终如一地(无处不在!)用于所有[可变]数据,那么所有 SQL 注入(inject)攻击*都会被阻止,无论是二阶攻击还是其他攻击.

这并不意味着没有漏洞或其他攻击媒介——但它确实意味着拥有“聪明的用户名”的人将无法发送意外的“DROP”到数据库。正如所指出的,如果任何地方使用“不安全的 SQL 语句”,那么,wham! 保证将失效。

(“不安全 SQL 语句”集包括但不限于任何对所有[可变]数据使用占位符的语句。)

快乐编码。


*当然,这假设占位符支持/数据库驱动程序中没有错误/漏洞。但那是另一个故事......

关于php - MYSQL二阶攻击问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7907978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com