簡體   English   中英

需要一些SQL的幫助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM