這篇文章主要講解了“PHP操作用戶提交內容時需要注意哪些危險函數”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP操作用戶提交內容時需要注意哪些危險函數”吧!
對于我們的程序開發來說,用戶的輸入是解決安全性問題的第一大入口。為什么這么說呢?不管是SQL注入、XSS還是文件上傳漏洞,全部都和用戶提交的輸入參數有關。今天我們不講這些問題,我們主要探討下面對用戶的輸入,有一些危險的函數在未經驗證的情況下是不能直接使用這些函數來進行操作的,比如:
include($g);
假設這個 $g 是用戶提交的內容,我們在未經驗證的情況下直接使用這個參數來包含文件,我們傳遞的參數為 ?g=/etc/passwd ,那么服務器上所有的用戶帳號信息就很可能就直接泄露了。
另外,一些執行 shell 命令的函數還是極度危險的。
echo system($g);
當我們傳遞的參數是 ?g=ls -la / 時,同樣的服務器目錄也展示了出來,這還僅僅是顯示目錄結構,如果使用其它更恐怖的命令后果將不堪設想。
同理,我們經常會根據一些id或指定的文件名來操作文件,特別是在刪除文件的時候,如果未加判斷,那么也可能直接去刪除某些非常重要的文件。
unlink('./' . $g);
我們繼續將 $g 構造為 ?g=../../../xxxx ,如果在權限允許的情況下,就可以刪除各種系統文件。
對這些內容,其實在 PHP 的官方手冊中就已經給出了一些很好的建議,我們不妨來直接看看 PHP 手冊中是如何說的。
很多 PHP 程序所存在的重大弱點并不是 PHP 語言本身的問題,而是編程者的安全意識不高而導致的。因此,必須時時注意每一段代碼可能存在的問題,去發現非正確數據提交時可能造成的影響。
必須時常留意你的代碼,以確保每一個從客戶端提交的變量都經過適當的檢查,然后問自己以下一些問題:
還可以考慮關閉 register_globals,magic_quotes 或者其它使編程更方便但會使某個變量的合法性,來源和其值被搞亂的設置。在開發時,可以使用 error_reporting(E_ALL) 模式幫助檢查變量使用前是否有被檢查或被初始化,這樣就可以防止某些非正常的數據的撓亂了。
其實,只要能遵守這些建議,大部分的安全問題都能得到解決。還是那句話,不能相信用戶的任何輸出,在測試的時候請做好各種驗證,包括但不限于邊界值、特殊符號、特殊命令、越界值、目錄權限等。在非必要的情況下不要使用用戶的輸入作為包含文件、執行腳本及文件操作的直接參數,如果一定要用的話千萬要進行各種形式的過濾驗證。
感謝各位的閱讀,以上就是“PHP操作用戶提交內容時需要注意哪些危險函數”的內容了,經過本文的學習后,相信大家對PHP操作用戶提交內容時需要注意哪些危險函數這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。