[英]Need help with some SQL
<?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>
如何防止人們僅輸入空格並插入空白條目? :/您還看到其他任何潛在威脅嗎?
謝謝。 /新手
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
}
}
您應該在調用任何SQL之前對字段進行驗證,以防止出現不必要的輸入和SQL注入。
您可能還想對密碼的長度/強度,電子郵件上的正則表達式等進行檢查。
在您的代碼中,現在有人可以輸入任何內容。
另外,您是否還在數據庫端使用唯一的電子郵件/用戶名約束來處理復雜的條目?
編輯-看起來您可能已經用mysql_real_escape_string覆蓋了SQL注入
您可以修剪這些值並檢查是否為空字符串,然后向用戶詢問真實的電子郵件地址。 您還可以將正則表達式用作某些驗證的一部分。 最后,我不確定如何使用PHP實現此目的,但是您可以參數化SQL。
您應該考慮可用性和安全性。
為了提高可用性:添加javascript驗證程序,當用戶以錯誤的格式編寫電子郵件時,這些驗證程序將為用戶顯示一些工具提示,等等。
為了安全起見:您應該在執行插入查詢之前驗證數據,驗證器可以與js驗證器相同(但“智能”用戶只需在瀏覽器中禁用javascript)
如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中搜索開放式源驗證庫感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.