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

Spe*_*May 5 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';
  }
}
Run Code Online (Sandbox Code Playgroud)

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