这是我在 stackoverflow 上的第一篇文章,我不会说英语,但我可以尽量弄清楚我的问题:)
我有一个 PHP 注册表单和两个语句:
第一个声明:例如,如果没有另一个伪/电子邮件,则在我的表“用户”中搜索。
$request = $db->prepare("SELECT * FROM users WHERE USE_USERNAME = :username AND USE_EMAIL = :email AND USE_PASSWORD = :password");
$request->bindParam(':username', $username, PDO::PARAM_STR);
$request->bindParam(':email', $email, PDO::PARAM_STR);
$request->bindParam(':password', $password, PDO::PARAM_STR);
$request->execute();
var_dump($request);
while ($row = $request->fetchAll(PDO::FETCH_ASSOC)){
if ($username == $row['USE_USERNAME']){ ...
第二个声明:如果用户输入了正确的数据,我可以将输入插入到我的数据库中。
$request = $db->prepare("INSERT INTO users (USE_USERNAME, USE_EMAIL, USE_PASSWORD) VALUES (:username, :email, :password)");
$request->bindParam(':username', $username, PDO::PARAM_STR);
$request->bindParam(':email', $email, PDO::PARAM_STR);
$request->bindParam(':password', $pass_hache, PDO::PARAM_STR);
$request->execute();
我的问题:
当我在输入中插入 'OR 1=1' 时,我可以在数据库中插入相同的电子邮件地址。
我在这个网站上搜索了一个解决方案,并将这些行添加到我的数据库连接中:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
但我的数据插入甚至我在我的 PHP 代码中放入错误消息(在我的 while 循环中使用 Javascript 弹出窗口)。
我是初学者,我正在寻找类似的问题,但如果您有答案,谢谢您的帮助:)
祝你有美好的一天:)
编辑 : 我会在我管理 PHP 中的错误时向你解释 :
while ($row = $request->fetchAll(PDO::FETCH_ASSOC)){
if ($username == $row['USE_USERNAME']){
?>
<script type="text/javascript">
alert("Erreur#5 : Pseudonyme Faux !"); //Cas dans lequel les identifiants sont incorrects.
document.location.href="subscribe.php";
</script>
<?php
$error++;
这很平庸,但我有一个从 0 开始的变量 $error,我递增它以停止 PHP 脚本。
唯一的用户名和电子邮件存在错误。在我的 prepare 语句之前,我的错误起作用了,但现在我想防止我的表单受到 SQL 注入(inject)。
最佳答案
这是一个有很多怪癖的问题:
1st - 你应该用类似的东西验证你的输入
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)
http://php.net/manual/en/function.filter-var.php
第二 - 你应该在你的数据库中放置一个关于你的电子邮件的唯一性约束
ALTER TABLE user ADD UNIQUE unique_index_email(电子邮件);
第三 - 如果用户名和密码也相同,您的查询只会返回电子邮件。您应该只查询电子邮件。就像是
$request = $db->prepare("SELECT * FROM users WHERE USE_EMAIL = :email");
因为这将确保如果 1 存在,它将被返回
第四 - 我强烈建议您不要在数据库中保留密码,只保留散列值。你有加密强大的库作为 php 库可用,并内置于 some这应该可以解决问题
关于php - 邮箱验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987814/