2013-12-23 20 views
1

驗證接收到的參數是否有意義,例如只用作比較器?在使用它們之前驗證接收到的值

比方說,我收到用戶的電子郵件地址,我想檢查它是否存在於數據庫中。

我可以先檢查它是否真的是電子郵件地址,然後嘗試在數據庫中找到它。例如:

$email = trim($_POST["email"]); 

if (isEmail($email)) { 
    if (isRegisteredEmail($email)) { // Will execute a SQL query 
     echo "Email address registered"; 
    } 
    else { 
     echo "Email address is not registered"; 
    } 
} 
else { 
    echo "This is not an email address"; 
} 

或者我可以只是簡單的做這樣的事情:

if (isRegisteredEmail(trim($_POST["email"])) { // Will execute a SQL query 
    echo "Email address registered"; 
} 
else { 
    echo "Email address is not registered"; 
} 

我相信這可能是更大的UX的問題,但...

+1

這取決於您的系統是如何完成的以及「電子郵件」地址的用途。就我個人而言,我會對電子郵件進行驗證,是的。 –

回答

0

其實這取決於未來的要求從你的客戶那裏「爲你的工作付錢」。

但一般是的,你應該驗證一切。如果你不在乎你的用戶發給你什麼,可能會發生很多奇怪的事情。我的意思是在你的情況下,例如可以在數據庫中插入多個電子郵件地址,並且如果這是一個時事通訊應用程序,給定的用戶可以接收多個郵件。這可能很煩人而且不專業。他們可以認爲這是垃圾郵件。一般來說,做任何看似垃圾郵件的事情都不好。他們可以將您的服務器置於黑名單,拒絕有效的郵件通信。

否則輸入驗證是系統中第一道防線。如果你正確地驗證了一切,你可以拒絕許多不同的攻擊。 (不同類型的注入技術,跨站點腳本等)

+0

你誤會了。正如我在第一條評論中提到的,如果我要保存一些電子郵件,我正在檢查「是否真的是電子郵件......?」 ,但是如果我只需要知道這封郵件是否在我的數據庫中呢?我需要再次檢查它是否是電子郵件,然後「選擇COUNT()從表WHERE電子郵件=?;」或者我將選擇每個收到的字符串(當然使用預先準備的語句進行安全性) – 0101

+0

根據您的情況,可以檢查輸入看起來是否真的像是電子郵件。你可以保存一個數據庫查詢。在這種情況下,你可能也必須關心sql注入。您的問題的一個方面可以是標準化來自用戶用戶的電子郵件地址。我的意思是刪除空格,使他們小寫。重點是避免準複製。 –

0

你打算如何檢查它是否被註冊?

如果您使用SQL查詢進行檢查,並且$ email是來自不受信任的源,那麼在將其用於任何SQL查詢之前,應對其進行篩選以防止SQL注入攻擊。

因此,在這種情況下,您必須在調用SQL以查看它是否已註冊之前驗證它是有效或合理有效的電子郵件地址。

如果您正在查看是否通過簡短列表進行註冊,例如從初始化文件註冊,則不需要檢查它。

+0

我正在使用SQL準備語句,所以它沒關係。我的問題是,如果我必須檢查「是的電子郵件地址」或「這是用戶的暱稱」,而不僅是空字符串(例如) – 0101

0

您不能真正檢查電子郵件是否有效(因爲它屬於該人或它存在),但您可以檢查它是否符合電子郵件標準。我會這樣做,使用filter_var函數如下所示;

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     // Email conforms 
} else { 
     // Email does not conform 
} 

爲了打擊覈實電子郵件的所有權,你可以要求用戶通過發送一個唯一代碼,他們登記的帳戶的電子郵件地址,最先進行驗證。爲了讓他們激活帳戶,他們需要這個獨特的代碼,當然這些代碼將被髮送到他們的電子郵件。

另一種方法是發送一個隨機密碼到電子郵件,以便他們第一次登錄到該帳戶,然後強制他們在第一次登錄時更改它。

一些諸如下面是如何將所有的工作

當然,你需要存儲您在數據庫中發送的電子郵件地址的代碼。我通常將它存儲在以負值登錄的次數,並用它來比較它爲自己保存一個數據庫列。

希望這有助於。

+0

感謝您的評論,但我知道所有這些事情,我問的是不同的東西。還有一個解釋。如果我只需要知道電子郵件地址是否被採用(我將使用SELECT ...),我應該檢查用戶是否發送了真正的電子郵件地址,或者我可以檢查數據庫中的每個值嗎?它不一定是電子郵件地址,它可以是暱稱,在這種情況下,檢查例如是否(!empty($ _ GET [「nickname」])),然後選擇...?很重要。 – 0101

0

如果您想檢查有效的電子郵件格式,可以輕鬆使用HTML 5電子郵件字段。

< INPUT TYPE = 「電子郵件」 NAME = 「電子郵件」>

http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_input_type_email

它會檢查格式類似[email protected]

,或者你必須使用正則表達式。 這可能有助於 How to validate an Email in PHP?

+0

是的,但是如果我不通過HTML表單發送電子郵件/數據怎麼辦? – 0101

+0

如果您只需檢查電子郵件地址是否已註冊,那麼您不需要檢查它是否是有效的電子郵件地址。 你可以使用mysql_real_escape_string來清理輸入。 –

相關問題