php disable classes,PHP安全配置基础教程(3)
解決方法:
要求程序員對(duì)所有用戶提交的要放到SQL語句的變量進(jìn)行過濾。
即使是數(shù)字類型的字段,變量也要用單引號(hào)擴(kuò)起來,MySQL自己會(huì)把字串處理成數(shù)字。
在MySQL里不要給PHP程序高級(jí)別權(quán)限的用戶,只允許對(duì)自己的庫(kù)進(jìn)行操作,這也避免了程序出現(xiàn)問題被 select INTO OUTFILE … 這種攻擊。
8、警告及錯(cuò)誤信息
PHP默認(rèn)顯示所有的警告及錯(cuò)誤信息:
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
在平時(shí)開發(fā)調(diào)試時(shí)這非常有用,可以根據(jù)警告信息馬上找到程序錯(cuò)誤所在。
正式應(yīng)用時(shí),警告及錯(cuò)誤信息讓用戶不知所措,而且給攻擊者泄漏了腳本所在的物理路徑,為攻擊者的進(jìn)一步攻擊提供了有利的信息。而且由于自己沒有訪問到錯(cuò)誤的地方,反而不能及時(shí)修改程序的錯(cuò)誤。所以把PHP的所有警告及錯(cuò)誤信息記錄到一個(gè)日志文件是非常明智的,即不給攻擊者泄漏物理路徑,又能讓自己知道程序錯(cuò)誤所在。
修改php.ini中關(guān)于Error handling and logging部分內(nèi)容:
error_reporting = E_ALL
display_errors = Off
log_errors = On
error_log = /usr/local/apache/logs/php_error.log
然后重啟apache,注意文件/usr/local/apache/logs/php_error.log必需可以讓nobody用戶可寫。
9、disable_functions
如果覺得有些函數(shù)還有威脅,可以設(shè)置php.ini里的disable_functions(這個(gè)選項(xiàng)不能在httpd.conf里設(shè)置),比如:
disable_functions = phpinfo, get_cfg_var
可以指定多個(gè)函數(shù),用逗號(hào)分開。重啟apache后,phpinfo, get_cfg_var函數(shù)都被禁止了。建議關(guān)閉函數(shù)phpinfo, get_cfg_var,這兩個(gè)函數(shù)容易泄漏服務(wù)器信息,而且沒有實(shí)際用處。
10、disable_classes
這個(gè)選項(xiàng)是從PHP-4.3.2開始才有的,它可以禁用某些類,如果有多個(gè)用逗號(hào)分隔類名。disable_classes也不能在httpd.conf里設(shè)置,只能在php.ini配置文件里修改。
11、open_basedir
前面分析例程的時(shí)候也多次提到用open_basedir對(duì)腳本操作路徑進(jìn)行限制,這里再介紹一下它的特性。用open_basedir指定的限制實(shí)際上是前綴,不是目錄名。也就是說 “open_basedir = /dir/incl” 也會(huì)允許訪問 “/dir/include” 和 “/dir/incls”,如果它們存在的話。如果要將訪問限制在僅為指定的目錄,用斜線結(jié)束路徑名。例如:”open_basedir = /dir/incl/”。
可以設(shè)置多個(gè)目錄,在Windows中,用分號(hào)分隔目錄。在任何其它系統(tǒng)中用冒號(hào)分隔目錄。作為Apache模塊時(shí),父目錄中的open_basedir路徑自動(dòng)被繼承。
四、其它安全配置
1、取消其它用戶對(duì)常用、重要系統(tǒng)命令的讀寫執(zhí)行權(quán)限
一般管理員維護(hù)只需一個(gè)普通用戶和管理用戶,除了這兩個(gè)用戶,給其它用戶能夠執(zhí)行和訪問的東西應(yīng)該越少越好,所以取消其它用戶對(duì)常用、重要系統(tǒng)命令的讀寫執(zhí)行權(quán)限能在程序或者服務(wù)出現(xiàn)漏洞的時(shí)候給攻擊者帶來很大的迷惑。記住一定要連讀的權(quán)限也去掉,否則在linux下可以用/lib/ld- linux.so.2 /bin/ls這種方式來執(zhí)行。
如果要取消某程如果是在chroot環(huán)境里,這個(gè)工作比較容易實(shí)現(xiàn),否則,這項(xiàng)工作還是有些挑戰(zhàn)的。因?yàn)槿∠恍┏绦虻膱?zhí)行權(quán)限會(huì)導(dǎo)致一些服務(wù)運(yùn)行不正常。PHP的mail函數(shù)需要/bin/sh去調(diào)用sendmail發(fā)信,所以/bin/bash的執(zhí)行權(quán)限不能去掉。這是一項(xiàng)比較累人的工作,
2、去掉apache日志其它用戶的讀權(quán)限
apache的access-log給一些出現(xiàn)本地包含漏洞的程序提供了方便之門。通過提交包含PHP代碼的URL,可以使access-log包含PHP代碼,那么把包含文件指向access-log就可以執(zhí)行那些PHP代碼,從而獲得本地訪問權(quán)限。
如果有其它虛擬主機(jī),也應(yīng)該相應(yīng)去掉該日志文件其它用戶的讀權(quán)限。
當(dāng)然,如果你按照前面介紹的配置PHP那么一般已經(jīng)是無法讀取日志文件了。
總結(jié)
以上是生活随笔為你收集整理的php disable classes,PHP安全配置基础教程(3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 分布键,DWS使用技巧:根
- 下一篇: php是实现点击改变状态,PHP利用he