2016-08-02 65 views
0

我有一個基於表單的身份驗證的Web應用程序。 該應用程序也具有註冊功能。自過去幾周以來,我觀察到一些具有特定域名的用戶正在僞造網站並獲得好處,因爲我們沒有任何批准工作流程。 此用戶可以手動執行或運行一些腳本。我們認爲我們可以根據IP來限制註冊流程,但是使用C#獲取訪問者的確切IP地址是不可能的(如果我錯了,請更正)。 我們可以用一些其他技術來做到這一點。我們的要求是 - 每2天一臺機器進行一次註冊。限制註冊一臺機器C#

+0

我沒有針對您的解決方案,但不建議使用IP地址。即使你能夠獲得他們的IP地址,他們也可以使用代理並欺騙IP。很多人使用電信。例如,他們必須註冊一個電話號碼並進行驗證。欺騙電話號碼很難。 –

+0

我們是否應該使用cookies,但在這種情況下,用戶可以刪除cookies並且可以一次又一次地註冊 – Anurag

回答

0

不幸的是我會把這個任務稱爲不可能的。

想法1:IP地址。用戶可以使用一個代理來註冊多個帳戶,具體取決於他可以找到多少個代理(免費在互聯網上有一堆代理)

或者他們可以通過在標頭中放置一個隨機IP來僞造ip包。因爲他們所需要的只是註冊,所以如果確認消息被髮送給另一個隨機的傢伙並不重要

想法2:每臺機器註冊一次。我可以使用虛擬機虛擬出儘可能多的機器,並且您無法通過http請求進行分析。

或者我可以用原始http請求僞造所有的信息,我可以用沒有問題的腳本來做到這一點。

,從我知道你沒有從JS讀取硬件ID(糾正我,如果我錯了)

沒有方法是保證限制每一天,但基於IP的方法2註冊應該工作的系統權針對大多數普通用戶。千萬記住,每個人都使用相同的路由器可能具有相同的IP(例如學校,公寓公共WiFi)

你可以HttpContext對象中找出用戶的IP地址

0

無論你的限制將是 - 它將基於瀏覽器發送的數據(只要您限制特定的計算機)。 您的主要願望是在該機器上創建一個「足跡」,以便稍後使用 - 每個請求。

無論你的操作是什麼,你也應該混淆你的JS代碼。例如,在頁面加載代碼中,您可以請求專用於該機器的httpheaders並將它們保存在緩存中,然後爲其註冊的客戶端生成一個guid。

另一個選擇是使用AES在發送數據之前對數據進行加密,這樣你就無法操作它。

最重要的是,一旦你在客戶端「丟掉」了一個js代碼,他可以做任何他想做的事情,問題是它會是多麼困難。

**編輯: 一個更安全的方式,但更復雜,我曾經使用創建一個同步密鑰。 向服務器請求加密密鑰的異步ajax調用。 服務器調用會將新的guid-key保存在內存中,並會爲每個請求生成一個新的guid-key。 你可以使用這個想法來跟蹤用戶調試和瀏覽器行爲。 作爲調試將保持運行同步密鑰的代碼將被改變,你可以「抓住」他。

0

cookies和IP都不能防止僞造條目。

你應該從另一面看它。您會收到不需要的條目,而且您不知道它是否是一個自動化的機器人,垃圾郵件發送者或者不關心您的數據的人。你應該考慮如何驗證它們,而不是禁止輸入。例如,如果您將「aaaaa」作爲名稱,將「bbbbb」作爲電子郵件地址 - 至少需要在客戶端和服務器端添加正則表達式驗證,以確保您獲得所需格式的數據。下一級將通過查詢郵件服務器或發送驗證電子郵件來驗證電子郵件地址。這不僅有助於阻止垃圾郵件發送者,也有助於阻止垃圾郵件發送者。如果你認爲它是一個自動化的機器人 - 添加驗證碼。在緊急情況下 - 禁止在web.config中使用IP(請參閱ASP.Net How to limit access to a particular IP address to a particular page through web.config file (.htaccess similar)?