2013-06-24 194 views
1

我的許多頁面是從使用$ _Get從MySQL中獲取的結果中生成的。這意味着網址就像這樣結束/park.php?park_id=1。這是一個安全問題,最好從URL中隱藏查詢字符串?如果是這樣,我該如何去做呢?php安全性應該隱藏url中的查詢字符串

另外我已經在某處看過Google不會索引?的網址,這會是一個問題,因爲這些是我網站的主要網頁。這個真相嗎?

謝謝

+2

這只是一個安全問題,如果你不清理/限制查詢參數在你身邊。換句話說,在你的代碼中使用它之前,請檢查'park_id'的值是否是你期望的值... – crush

+1

如果編輯URL允許你獲得你不應該訪問的任意項目,則問題出現在你的服務器上端代碼。 –

+1

至於谷歌問題請參閱[本指南](http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//webmasters/docs/search-engine-optimization-starter-guide.pdf )(大約8-11頁)。 **編輯** - 答案是谷歌更喜歡SEO友好的網址,但仍會索引查詢字符串。 – naththedeveloper

回答

5

這只是一個安全問題,如果這是敏感信息。例如,您將用戶發送到這個網址:

/park.php?park_id=1 

現在,用戶知道當前正在觀看的公園內有「1」在數據庫系統標識符。如果用戶手動請求此操作,會發生什麼情況?:

/park.php?park_id=2 

他們是否損害了您的安全?如果他們不是允許查看park ID 2,那麼這個請求應該會失敗。但它是一個問題是他們碰巧知道有一個1或2的ID?

在這兩種情況下,所有用戶正在做的是提出請求。服務器端代碼負責正確處理該請求。如果用戶不被允許查看該數據,則拒絕該請求。不要試圖阻止用戶從製作的請求,因爲他們總是可以找到方法。 (他們可以手動輸入。即使從未訪問過您的站點。)安全性是在響應請求時發生的,而不是在做出響應。

有一些數據他們不允許知道。但是ID可能不是那種數據。 (或者至少不應該,因爲數字ID很容易猜到。)

+0

我期望的SQLi ... – HamZa

+3

@HamZa:我不知道我理解。你是指SQL注入?這是服務器端代碼中的漏洞(通過不恰當地處理請求),並且與查詢字符串值無關。 SQL注入也可能發生在PUT/POST值,請求體等等。安全問題並不是存在查詢字符串值,而是服務器上存在錯誤的代碼。 – David

+0

是的,我指的是SQL注入,這只是我的期望。不要誤解我的意思,你的回答很好。 – HamZa

2

不,它絕對沒有事實。

任何來自客戶端的數據都會受到欺騙。無論它是在查詢字符串還是POST表單或URL中。它就這麼簡單......

就「Google不索引URL爲?」而言,誰曾告訴過你,他們不知道他們在說什麼。有「SEO」的最佳做法,但他們與「谷歌不索引」無關。它比這更細。是的,Google會爲您編制索引。

@David確實在使用URL中的標識符時顯示出一個潛在的問題。實際上,這有一個非常具體的名字:A4: Insecure Direct Object Reference

請注意,它不是使用的ID很差。這是你需要授權用戶的URL。因此,通過您向用戶顯示的鏈接執行權限soley是不良的。但是如果你在點擊URL的時候也授權他們,你應該沒問題。

所以不,總之,你很好。你可以去「漂亮的網址」,但不要因爲你在這裏發佈的任何東西而...