我已閱讀couplerelated questions對此,但他們不直接回答我的問題。像Firebug這樣的開發工具允許任何人在發送表單之前查看和處理表單數據。一個很好的例子就是調整一個隱藏的「會員ID」字段的值,以便表單提交被記入另一個用戶。保護使用Firebug的惡意用戶的表單數據的最佳方式?
防止此類篡改的最佳方法是什麼?我的研究表明將敏感表單輸入移動到服務器端腳本,但是還有其他選擇或考慮嗎?
我熟悉PHP和jQuery,所以我理想的解決方案是使用這兩種語言中的一種或兩種。
我已閱讀couplerelated questions對此,但他們不直接回答我的問題。像Firebug這樣的開發工具允許任何人在發送表單之前查看和處理表單數據。一個很好的例子就是調整一個隱藏的「會員ID」字段的值,以便表單提交被記入另一個用戶。保護使用Firebug的惡意用戶的表單數據的最佳方式?
防止此類篡改的最佳方法是什麼?我的研究表明將敏感表單輸入移動到服務器端腳本,但是還有其他選擇或考慮嗎?
我熟悉PHP和jQuery,所以我理想的解決方案是使用這兩種語言中的一種或兩種。
您不能使用jQuery安全性,因爲它全部在客戶端處理。
在你的例子中,只使用一個PHP會話來處理隱藏的輸入字段,因爲正如你正確地指出的那樣,這可以被操縱。
使用會話看起來像以下:
登錄頁面
<form action="login.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="submit" value="submit">
</form>
的login.php
// you have to include this on every page to be able to user sessions.
// also make sure that you include it before any output
session_start();
//Always sanitize the user input before doing any db actions.
//For example by using: `mysql_real_escape_string()` (http://php.net/manual/en/function.mysql-real-escape-string.php).
// check user credentials against db
$_SESSION['user'] = $dbresult['username'];
頁,其中,用戶ID,是-required.php
session_start();
if (!isset($_SESSION['user'])) {
// user is not logged in!
} else {
// use user info to place order for example
}
Th e會話將被激活,直到用戶關閉他的瀏覽器/直到會話過期(這是一個PHP設置)
以上只是一些示例代碼給你一個想法。
它可以處理較小的項目,但是隨着項目變得越來越複雜,我建議使用MVC(模型,視圖,控制器)方式。 (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
但是,這只是一個整體的其他故事:)
謝謝。我正在研究使用PHP會話,因爲我從來沒有在服務器端腳本中使用它們來收集用戶數據。 – 2011-05-24 22:04:53
@Ryan:更新了我的回答,給出了一個使用會話 – PeeHaa 2011-05-24 22:18:58
rock的例子。我會給這個旋轉並報告回來。萬分感謝。 – 2011-05-25 01:02:08
這裏有一些基本的建議:
您需要驗證使用服務器端(PHP)腳本的形式輸入。
而不是依靠表單中的敏感信息,如成員ID,您可以將這些數據緩存在服務器會話中。這樣,惡意用戶就無法立即更改數據。
你仍然可以使用jQuery驗證是爲了方便趕基本輸入的問題,但你只能信任正在使用服務器端代碼驗證數據。
感謝您的回覆。你介意在服務器會話中緩存數據嗎?我使用的CMS可能已經有了這些信息,但我不知道如何在我的服務器端腳本中抓住它。有沒有一種標準的方式來獲取這些信息在PHP中? (編輯:我現在正在研究這個) – 2011-05-24 22:00:19
不僅僅是「惡意」的用戶 - 我經常在有趣的頁面上運行firebug,只是爲了看看它們是如何放在一起的。 – 2011-05-24 20:13:59