2012-03-03 116 views
1

我在創建php網站,其中我有一個document.php,基本上需要did (document ID)並顯示它。一個例子是mysite.com/document.php?did=1,它使用諸如SELECT * FROM documents WHERE id=1之類的查詢從數據庫中獲取文檔內容。我知道這種方法(如SQL注入)的安全問題,我都做了驗證和轉義,但有一個人告訴我的一件事是,創建一個爬行器可以非常簡單:在網站上顯示文章ID

for(int i = 0; i < 3000; ++i) 
    DownloadPage("mysite.com/document.php?did="+i); 

現在我有2個問題。

  1. 這是真的是我寫的代碼還是有另一個解決方案呢?例如,我知道我可以告訴Apache服務器限制一個IP的帶寬使用。 (或者可能是你提供的一個更好的選擇。)
  2. 如果這是一個問題,我有一個解決方案在我的腦海。我想我應該添加另一個參數到頁面。就像內容的散列一樣,將根據數據庫檢查它是否是正確的URL。

有一件事我看到很多是有時標題的一部分被追加到URL。就像這樣: mysite.com/document/1/some_part_of_the_url但我檢查過了,如果我刪除標題並轉到mysite.com/document/1它仍然會顯示相同的網頁。這讓我覺得這不是出於安全原因,更像是幫助用戶找出他要訪問的頁面的標題。

+0

如果沒有別的,使用URL中的標題將幫助您與SEO。沒有人會在Google中搜索「Post#1」:) – jmort253 2012-03-03 10:42:26

+0

是可供所有頁面瀏覽者或僅登錄用戶使用的文檔嗎? – 2012-03-03 10:43:53

回答

1

的原因,標題一般是附加到URL是用於搜索引擎優化。

文件應該是安全的嗎?如果是這樣,您需要實施某種認證。默默安全用戶不會猜測ID不是一個好辦法。即使將用戶名/密碼放入代碼中,然後使用會話來檢查用戶是否已通過身份驗證,也可以非常輕鬆地實現用戶名/密碼。

如果文件不安全,那麼我真的不覺得有必要擔心身份驗證。考慮一下,你可以通過訪問stackoverflow.com/questions/#{id}來查看問題。

+0

謝謝。這(以及所有其他答案)是我認爲是正確的。這就是我第一次問到我的代碼是否真的有問題?對於第一部分(爲URL添加標題的一部分),我該如何在PHP中完成它?我非常感謝你的幫助。 – 2012-03-03 11:07:54

+0

你想查看的是使用mod_rewrite的規範URL。谷歌它,你會發現很多教程 – christophmccann 2012-03-03 11:11:07

1

some_part_of_the_url在網址中提供一定程度的人工可讀性,以便抓取網頁等搜索結果的網頁爬蟲(例如googlebots)......更高的人工可讀性會影響搜索結果中該網頁的「加權」 。這不是出於安全原因。

而不是將文檔id分配爲自動增量,您可以指定一個散列值,以便它們不會是連續的數字,但這會增加代碼的複雜性...設置記錄ID的自動增量功能非常有用。

你最好限制在這個web服務器級別而非腳本級別(腳本仍然需要開始運行做任何測試,如果你申請這個在腳本級別)

1

我不明白的一件事是,這是如何變成安全問題的?

  • 讓某人使用抓取工具,對於你來說,它就像用戶訪問一個頁面一樣,對嗎?那麼它有什麼問題?

  • 如果您想阻止或限制訪問它,您可以使用您的php session功能並對其進行控制。

  • 如果要防止用戶不約而同地使用IDS,你應該通過你的邏輯控制它,如果這樣的會議允許用戶在您的特定文檔ID的訪問(很多合乎邏輯的方式來acheive它。)

請注意,大多數安全問題都可以通過嚴格檢查預期輸入來防止,而不是考慮多種解決方案。

現在這是通過您的應用程序的編碼預防部分。

但是安全性不僅僅是這樣,錯誤配置的服務器,網絡等也可能爲您造成問題。