我在stackoverflow和google中搜索了一种方法,以保护PHP中的登录身份验证免受SQL注入的影响。我在MySQL中有一个表,其中包含用户的用户名和密码(我手动添加它们,而不是让用户自由注册)。在访问表之前,首先要确保用户输入的用户名或密码不包含SQL脚本。我可以简单地检查用户名或密码是否只包含字母和数字吗?如果是这样,什么脚本会检查用户名是否只包含字母和数字?我知道如何检查是全是字母还是全是数字,但我想检查它们是字母还是数字的混合。话虽如此,我还是有点担心在用户名或密码中不包含特殊字符会使身份验证更容易受到攻击。
可以强制用户名和密码中包含特殊字符吗?有没有一种方法可以在允许特殊字符的同时保护站点不被SQL注入?mysql_real_escape_string的描述指出它已经被弃用,所以我不想使用它。我是PHP的新手,所以我也不擅长使用预准备语句。现在我只想从用户名和密码中去掉引号,开/关括号或空格。
还要注意,主登录页面index.php包含表单,但我将登录身份验证放在该表单authenticate.php的目标index.php页面上,因此验证将在那里进行,用户将无法查看该页面的源代码。
发布于 2015-08-26 16:22:09
在访问表之前,首先要确保用户输入的用户名或密码中不包含SQL脚本。
别费神。
我可以简单地检查用户名或密码是否只包含字母和数字吗?
当然,您可以完全自由地对用户名实施任何您想要的规则。但是无论如何你都不应该直接存储密码。
熟悉password_hash()和password_verify()。
我对
是个新手,所以我也不擅长使用预准备语句。
我能让你感兴趣吗EasyDB?它的目标是使准备好的语句简单直观。它还试图消除PDO中最大的缺点:默认情况下,它将模拟预准备语句,而不是使用真正的预准备语句。EasyDB会为您关闭该设置。
如果您已经承诺在不使用我们的包装器库的情况下使用PDO,请确保您关闭了模拟的预准备语句:
$pdo = new PDO(/* etc */);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);当您准备好直接使用PDO时,您可以简单地执行以下操作:
$pdo = $edb->getPdo();
// ...
$stmt = $pdo->prepare('SOME QUERY WITH PLACEHOLDERS');
if ($stmt->execute(['some', 'values'])) {
// use $stmt to fetchColumns or fetchAll, maybe even with PDO::FETCH_ASSOC?
// the sky is the limit here
}https://stackoverflow.com/questions/32221284
复制相似问题