这是我关于stackoverflow的第一篇文章,我防止您英语说得不太好,但是我可以尝试弄清楚我的问题:)
我有一个PHP注册表格,并且有两个声明:
第一句话:例如,如果没有其他伪/电子邮件,请搜索我的表“ users”。
$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注入。
这个问题有很多奇怪之处:
1-您应该使用类似http://php.net/manual/en/function.filter-var.php的输入来验证您的输入filter_var('[email protected]', FILTER_VALIDATE_EMAIL)
第二-关于电子邮件,您应该在数据库中放置一个唯一性约束,例如 ALTER TABLE user ADD UNIQUE unique_index_email (email);
3rd-您的查询仅在用户名和密码也相同的情况下返回电子邮件。您应该仅查询电子邮件。之类的东西,$request = $db->prepare("SELECT * FROM users WHERE USE_EMAIL = :email");
因为这将确保如果1存在,它将被返回
第四-我强烈建议您不要在数据库中保留密码,而只是保留哈希值。您拥有可作为php libs使用的加密功能强大的libs,并且内置了一些可以解决问题的技巧
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句