php – MYSQL二阶攻击问题

现在我正在使用预处理语句,选择/插入数据到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注入攻击*都会被阻止,二阶或其他.

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

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

快乐的编码.

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

转载注明原文:php – MYSQL二阶攻击问题 - 代码日志