這可能是一個重複的問題,但我真的找不到任何答案。我有一個忘記的密碼腳本,它使用$ _GET從URL中抓取用戶的電子郵件地址。然後,腳本檢查$ _GET是否有錯誤消息,然後通過mysql檢查天氣的用戶ID是否相同。用戶ID是否必須是整數?
現在,腳本本身很好,但用戶標識在var_dump()中以字符串形式返回,而不是整數形式。我打算放手,但後來我讀到,如果用戶ID不是$ _GET變量中的整數,它可能導致攻擊,這讓我有點擔心。我試圖將num_rows的值改爲int,但沒有成功,因爲num_rows返回一個數組。檢查用戶ID的代碼是:
if (mysql_num_rows($result) == 1) {
// NEED TO TURN THIS ARRAY TO AN INT
list($userId) = mysql_fetch_array($result, MYSQL_NUM);
}
//elseif (mysql_num_rows($result) <= 0) {
else {
$wrong = '<p style="color: red">Something went wrong. Please try again</p>';
}
就像我之前說的腳本本身是好的,它只是我讀的東西,現在不能把它弄出來我的頭,這使得我問你們。 Doe的用戶ID必須是一個整數,或者我可以以字符串的形式逃脫嗎?
編輯:謝謝你的意見和建議。在php中學習還有很多。再次歡呼。
如果你的腳本需要一個整數,你應該驗證輸入是一個整數。 '$ _GET'中的值將是字符串,但您可以使用'is_numeric'檢查它們並使用'(int)'將其轉換。 –
你從URL中抓取的東西應該是一個int。如果它是一個字符串,那就是一個漏洞。當您從數據庫中檢索ID時,只要您信任數據庫的內容,該值可以是一個字符串。 – 11684
使用[** FILTER_VALIDATE_INT **](http://php.net/manual/en/function.filter-var.php)。 [_這裏是(int)在這種情況下不可取的原因_](http://stackoverflow.com/questions/4789624/php-security-int-vs-filter-validate-int)。然後,[_這裏是它的另一個例子](http://codepad.org/kZGrkNuG) – itachi