2014-07-26 68 views
0

只是有一個想法,假設有一個表單有一個變量存儲一些數據(基於哪個 - 表單將被相應處理)。HTML - 從外部PHP文件後注入

說用戶得到他們的電子郵件轉診/註冊鏈接遵循註冊,假設URL以加密的GET變量,如:http://www.example.com?a42as231Adab

比如有後者從該ID獲取變量的一種形式:

$usersID = decrypt($_GET['user']); 
<form method='POST' action='viewdata.php?userID=$usersID'> 

因爲用戶可以點擊查看源代碼,他們將很容易地看到行動領先的位置以及解析的用戶ID。

等什麼會阻止某人: 創建自己的服務器上的一個空白的新PHP文件,複製原始形式到他們的PHP文件,並將其更改爲:

<form method='POST' action='viewdata.php?userID=1'> 

我的意思是假定在這種情況下用戶ID是連續的,所以1,2,3可能最終成爲管理員。

讓我們說viewdata.php,如果它通知用戶ID是admin,它將允許用戶管理一些東西。

換句話說:有沒有什麼辦法可以阻止表單從任何東西發佈到特定的域?

我知道這可能被認爲是非常差的安全措施,如果用戶可以根據他們的ID給予訪問,但仍然,我對此很好奇,這只是我得到的一個隨機想法。

+2

我不完全確定你的問題是關於什麼的,但我認爲你正在談論CSRF漏洞? – PeeHaa

+0

所以你說的是,當一個用戶使用加密的用戶ID訪問該頁面時,他實際上是以該用戶的身份登錄的(可以說用戶23)? (編輯:)因此,他可能只發布到viewdata.php?userID = 23 –

+0

簡言之:如果表單操作依賴於特定變量,什麼阻止用戶通過從外部域發送表單來更改該變量,從而可以編寫自己的腳本php表單並對其進行修改 – arleitiss

回答

0

如果你不想讓任何人搞亂敏感信息,只是不要給他們。您的index.php以加密形式處理此信息的方式相同,viewdata.php也可以這樣做。

您也可以將它存儲在$_SESSION中,並使viewdata.php從那裏獲取。那就是爲什麼$_SESSION是那種東西。

要防止跨網站發佈,請使用postkey。例如:

echo "<form method='POST' action='viewdata.php?userID=$usersID'>"; 
echo "<input type='hidden' name='postkey' value='" . session_id() . "'>'; 

現在viewdata.php,檢查是否$_POST['postkey'] == session_id()或知道這是否真的用戶提交的處方,如果他誘導一些外部源做到這一點。

+0

幾乎所有隱藏用戶信息但仍能夠跨頁訪問的唯一方法是使用會話? – arleitiss

+0

不可以。您可以使用加密技術。 – Havenard

+0

我喜歡使用校驗和+ AES塊cypher + base64的組合來生成具有敏感數據的字符串,我可以安全地將其交給用戶以供其他頁面處理。他不能讀它,因爲它的密碼,他不能亂它,甚至產生隨機行爲,因爲加密後面的校驗和確保解密結果是安全依靠的。 – Havenard