【问题标题】:I see this code to be vulnerable. What might be the cause?我认为这段代码很容易受到攻击。可能是什么原因?
【发布时间】:2014-04-19 00:58:56
【问题描述】:
if (isset($_POST['Login'])){

$UserName=$_POST['UserName'];
$Password=$_POST['Password'];

$login_query=mysqli_query($GLOBALS["___mysqli_ston"],"select * from voters where Username='$UserName' and Password='$Password' and Status='Unvoted' and Year='1st year'") or die(((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));

【问题讨论】:

标签: php mysql sql mysqli sql-injection


【解决方案1】:

只要您使用用户提交的变量并且不保护它,您就很容易受到攻击。

正如rogue所说,你可以使用Prepared statements,或者使用某些版本的引用,例如pdo的:

$password = $db->quote($password);

【讨论】:

  • 谢谢。如果您将上面的代码转换为 pdo 会很高兴
  • mysqli_query 不允许多个语句。所以你的例子是错误的。
  • @Gumbo 有趣 - 你绝对是正确的。我使用 PDO 比 mysqli 多得多,所以我没有意识到这一点。
  • @YourCommonSense 至少你是我们所追求的完美典范。如果你是文盲和判断力一样,实际上发生的是我的例子不正确 - 答案本身仍然有效。
【解决方案2】:

您应该考虑使用Prepared Statements,而不是直接从您的输入中连接结果。否则你很容易受到SQL Injection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2016-04-29
    • 2014-03-17
    • 2014-02-23
    • 2020-10-15
    相关资源
    最近更新 更多