如何在使用mysql_real_escape_string时进行SQL注入

时间:2015-06-23 19:05:13

标签: php mysql mysqli sql-injection mysql-real-escape-string

这被标记为重复,但我不认为这是一个公平的判断。这个问题再一次被简单地回答了......但这不是正确的答案。如果从实际的帖子表单中使用“重复”答案,则它不起作用。它被拒绝就像所有其他尝试一样。我实际上已多次使用该答案,它几乎出现在每个SQL注入备忘单上。请将此标记为重复标记。

此问题纯粹是为了理解,而不是用于访问其他网站。我多次读过MySQL转义不足以保护自己免受SQL注入。因此,我设置了多个测试页面来尝试SQL注入。我成功了一些,但从未使用过mysql_real_escape_string()函数。

我已经从作弊表中研究并尝试了许多例子,但是无法解决这个问题,因此我觉得它足够安全或足够安全。有人能举个例子吗?也许是为什么这个登录不安全的原因以及绕过登录和/或改变表的示例输入?

我打算也使用MySQLi。在这个例子中,我使用MySQL来询问与MySQLi相比这可能导致SQL注入问题的位置(另一个声明,但我从未见过证明)。

这是某人有机会证明不安全感,而不仅仅是说它不安全。

if (isset($_POST['aun'])) {
  $username = mysql_real_escape_string($_POST['aun']);
  $checkadminlogin = mysql_query("SELECT * FROM admin WHERE un='$username'");
  $uncreds = mysql_fetch_assoc($checkadminlogin);
  $pass = mysql_real_escape_string($_POST['apwd']);
  //Line to get key for encrypting input password, used below as $keyinfo['op_value'];
  $salt = $keyinfo['op_value'];
  $fpass = sha1($pass . $salt);
  if ($fpass == $uncreds['pwd']) {
    echo 'Congrats, you logged in. Or hacked your way in. Whatever';
  }
}

另外在旁注中,你不能只更换所有特殊字符以防止任何注射吗?

0 个答案:

没有答案