2016-11-23 51 views
-1


我是PHP安全新手,嘗試實施PDO以外的解決方案。
我在這裏閱讀了幾篇文章,並在google上搜索了很多文章。
我試圖寫我自己的代碼來保護用戶輸入。
如果我在這裏留下任何東西或者我在這裏使用了任何不必要的東西,我會請求這裏的專家請看看並指導我。
另外我錯過了CSRF預防。除了隨機令牌生成之外還有其他什麼嗎?這可以用任何函數來實現嗎?保護來自各種攻擊的PHP數據

extract($_POST); 
$stuid = filter_input(INPUT_GET, 'stud_id', FILTER_SANITIZE_SPECIAL_CHARS); //php filter extension 
$stuid = trim($stuid); 
$stuid = strip_tags($stuid); 
$stuid = iconv('UTF-8', 'UTF-8//IGNORE', $stuid); //remove invalid characters. 
$stuid = htmlspecialchars($stuid, ENT_COMPAT, 'UTF-8'); // manual escaping 
$stuid = mysql_real_escape_string($stuid); 
$stuid = htmlspecialchars($stuid, ENT_COMPAT, 'UTF-8'); //Cross site scripting (XSS) 
$email = filter_input(INPUT_POST, $email, FILTER_SANITIZE_EMAIL); 
$pass=md5($pass); 

在此先感謝。

在我的用戶已經提交了一塊數據的存儲數據庫的情況下
+2

「除了PDO」...我認爲你的意思除了mysqli以外。你真的不應該推出自己的安全。有些事情會出錯。 – Gerrit0

+0

這段代碼實際上並不*做任何事情,所以你要保護什麼?沒有任何一行「安全代碼」可以使應用程序安全。你必須知道應用程序在做什麼以及它可以被利用的方式。此應用程序不會執行任何操作。 – David

+2

是'$ pass = md5($ pass);'散列密碼?如果是這樣,請使用'password_hash()'代替 - http://php.net/manual/en/function.password-hash.php – Steve

回答

0

,然後我需要確保我已經消毒,並使用parametized查詢:

/* Prepare an insert statement */ 
$query = "INSERT INTO myTable (DangerousData, MoreDangerousData) VALUES (?, ?)"; 
$stmt = $mysqli->prepare($query); 

$stmt->bind_param($val1, $val2); 

// white listing is always the MOST secure since we control the data 
switch ($_POST['DangerousData']) { 
    case 'Lamb': $val1 = 'Lamb'; break; 
    case 'Sheep': $val1 = 'Sheep'; break; 
    // so if they send something not allowed, we have a default 
    default: $val1 = 'WolfinsheepsClothing'; 
} 

// otherwise, the parametization of the statement will 
// clean the data properly and prevent any SQL injection 
$val2 = $_POST['MoreDangerousData']; 

/* Execute the statement */ 
$stmt->execute(); 

對於電子郵件的目的,您需要研究互聯網上的示例,瞭解如何正確處理來自用戶的輸入信息,以便用戶使用它 - 大多數人使用正則表達式來驗證電子郵件的安全性和有效性。

Stackoverflow can help you validate an email

Stackoverflow can help sanitize user input, too

+2

讓我重申,作爲一種編碼習慣做最不安全的事情是使用提取器將不潔變量轉儲到範圍中。如果該值仍然在POST中,則認爲它是不安全的;期。一旦你「拿出來」,那麼它應該專門用於預期目的。消毒發送電子郵件不同於消毒生成HTML不同於消毒存儲在數據庫中。沒有「一刀切」,就像你保護信用卡不同於你現金(我可以自拍我的本傑明富蘭克林,但不是我的whatsinyourwallet簽證,呃?) – WEBjuju