2016-07-23 52 views
0

我目前正在創建一個有趣的網站,並且我總共使用了php,javascript和mysql。如何使用php安全地更新數據庫中的數據

我必須更新數據庫中的數據。這是我的數據庫的結構:

的recordId(自動編號) recordvalue(VARCHAR)

,並在我的HTML我有一個包含的recordId和recordValue表

當我點擊編輯按鈕。

的recordValue傳遞到文本輸入 和的recordId傳遞給一個隱藏的輸入。

是否安全?

還是有更好的方法來安全地做到這一點。

我已閱讀了一些關於sql注入和會話的基本文章。

是否可以更改隱藏的輸入值。在運行時。我的意思是點擊編輯按鈕後。那數據會發送到我的php代碼?

我有這個php代碼。

$stmt = $conn->prepare("CALL sp_updatedata (?,?)"); 

$stmt->bindParam(1, $userid, PDO::PARAM_INT, 10); 
$stmt->bindParam(2, $u_name, PDO::PARAM_STR, 30); 
$stmt->execute(); 
+1

您已經在使用準備好的語句是來自瀏覽器爲合法或安全ST數據,從不在查詢中直接包含它。如果你一直這樣做,你不需要擔心SQL注入。 – BeetleJuice

回答

1

首先,它的關鍵是要了解以下內容:假設用戶可以看到一切您發送到瀏覽器。使用隱藏表單域是保護祕密安全的方法。只是不要將它發送給瀏覽器,如果你不希望用戶知道它

好吧,在你的問題:在瀏覽器中會發生什麼(如:記錄值移動到文本框,並記錄id隱藏字段)與SQL注入無關。當攻擊者使您的數據庫執行不需要的查詢時,就會發生SQL注入。發生這種情況是因爲程序員選擇將來自用戶的值直接插入到查詢中。你看,這裏的堆棧,尤其是在註冊和登錄查詢了很多:

SELECT * from users_table WHERE username = $_POST[username] 

爲了保護自己免受SQL注入,用準備好的語句

$stmt = $connection->prepare("SELECT...WHERE username = ?"); 
...bind the parameters to $_POST[username], then execute 
$stmt->execute() 

回顧一下

  1. 不要將任何內容發送到您不希望用戶看到的瀏覽器/ javascript
  2. 不要
+0

但我如何更新數據或刪除它?當我需要ID來執行查詢?我如何隱藏ID給用戶。即使他查看源代碼?查看源代碼很容易?但用戶不能查看只有html代碼的php代碼。我的意思是如果我列出數據到一個HTML表格。即將做的事情是用ID列出數據。爲了查詢哪個記錄要刪除或更新 – askquestionzero

+0

我認爲向用戶顯示item id是好的,所以你打算做的是好的。我只是想確保你明白,如果你把它發送給瀏覽器,你就不能保密。你說得對,PHP代碼無法看到。 – BeetleJuice