<?php
if (isset($_POST['email'])) {
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
mysql_query("INSERT INTO accounts (email, password) VALUES ('$email', '$password')");
}
?>
<h1>Create Account</h1>
<form action="" method="post">
<table cellspacing="3">
<tr>
<td valign="top">E-mail address:</td>
<td><input type="text" name="email" size="28"></td>
</tr>
<tr>
<td valign="top">Password:</td>
<td><input type="text" name="password" size="28"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
如何阻止人们进入空格并插入空条目? :/ 您是否看到任何其他潜在威胁?
感谢。 /新手
答案 0 :(得分:2)
if(!empty($_POST['email']) && !empty($_POST['password'])){
$email = trim($_POST['email']); // Remove trailing and leading spaces
$password = trim($_POST['password']);
if( $email != "" && $password != ""){
$email = mysql_real_escape_string($email);
$password = mysql_real_escape_string($password);
mysql_query("INSERT INTO accounts (email, password) VALUES ('$email', '$password')");
} else {
//DISPLAY ERROR MSG
}
}
答案 1 :(得分:0)
您应该在调用任何SQL之前对字段进行验证,以防止不需要的条目和SQL注入。
您可能还想对密码长度/强度,电子邮件上的正则表达式等进行一些检查。
现在,在您的代码中,有人可以输入任何内容。
另外,您是否在数据库方面使用唯一的电子邮件/用户名约束处理duplciate条目?
编辑 - 看起来您可能已经使用mysql_real_escape_string
覆盖了SQL注入答案 2 :(得分:0)
您可以修剪这些值并检查空字符串,然后向用户询问真实的电子邮件地址。您还可以使用正则表达式作为某些验证的一部分。最后,我不确定如何使用PHP实现此目的,但您可以参数化SQL。
答案 3 :(得分:0)
你应该考虑可用性和安全性。
可用性:添加javascript-validators,当用户以错误的格式编写电子邮件等时,将为用户显示一些工具提示。
为了安全起见:你应该在执行insert-query之前验证数据,验证器可以和js-validators相同(但'smart'用户可以简单地在浏览器中禁用javascript)
答案 4 :(得分:-1)
正如schooner所说,你应该在调用sql查询之前验证字段。我认为保留具有用于验证字段的常用函数的文件是一种很好的做法,因此您可以在代码中多次重用此函数。可以使用常规表达式进行此验证。我给你留了一个例子。
function checkEmail($email)
{
if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])
*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",
$email)){
return true;
}
return false;
}
另外......如果您需要验证很多输入条目,也许您会对在php中搜索开源验证库感兴趣。