PHP代碼安全和SQL Injection防范_PHP教程
推薦:php代碼防注入,保護代碼安全今天寫代碼的時候猛然想到是不能能夠通過一個文件來處理整個網(wǎng)站中所有可能出現(xiàn)注入的地方進行防范呢?這樣就能夠不用在每個程序里對每個變量進行過濾,節(jié)省了時間和代碼。 我們主要是
在PHP編碼的時候,如果考慮到一些比較基本的安全問題,首先一點:
1. 初始化你的變量
為什么這么說呢?我們看下面的代碼:
以下為引用的內(nèi)容:
if ($admin)
{
echo '登陸成功!';
include('admin.php');
}
else
{
echo '你不是管理員,無法進行管理!';
}
好,我們看上面的代碼好像是能正常運行,沒有問題,那么加入我提交一個非法的參數(shù)過去呢,那么效果會如何呢?比如我們的這個頁是 http://www.traget.com/login.php,那么我們提交:http://www.target.com/login.php?admin=1,呵呵,你想一些,我們是不是直接就是管理員了,直接進行管理。
當然,可能我們不會犯這么簡單錯的錯誤,那么一些很隱秘的錯誤也可能導致這個問題,比如最近暴出來的phpwind 1.3.6論壇有個漏洞,導致能夠直接拿到管理員權限,就是因為有個$skin變量沒有初始化,導致了后面一系列問題。
那么我們?nèi)绾伪苊馍厦娴膯栴}呢?首先,從php.ini入手,把php.ini里面的register_global = off,就是不是所有的注冊變量為全局,那么就能避免了。但是,我們不是服務器管理員,只能從代碼上改進了,那么我們?nèi)绾胃倪M上面的代碼呢?我們改寫如下:
以下為引用的內(nèi)容:
$admin = 0; // 初始化變量
if ($_POST['admin_user'] && $_POST['admin_pass'])
{
// 判斷提交的管理員用戶名和密碼是不是對的相應的處理代碼
// ...
$admin = 1;
}
else
{
$admin = 0;
}
if ($admin)
{
echo '登陸成功!';
include('admin.php');
}
else
{
echo '你不是管理員,無法進行管理!';
}
那么這時候你再提交 http://www.target.com/login.php?admin=1 就不好使了,因為我們在一開始就把變量初始化為 $admin = 0 了,那么你就無法通過這個漏洞獲取管理員權限。
2. 防止SQL Injection (sql注射)
SQL 注射應該是目前程序危害最大的了,包括最早從asp到php,基本上都是國內(nèi)這兩年流行的技術,基本原理就是通過對提交變量的不過濾形成注入點然后使惡意用戶能夠提交一些sql查詢語句,導致重要數(shù)據(jù)被竊取、數(shù)據(jù)丟失或者損壞,或者被入侵到后臺管理。
基本原理我就不說了,我們看看下面兩篇文章就很明白了:
http://www.4ngel.net/article/36.htm
http://www.4ngel.net/article/30.htm
那么我們既然了解了基本的注射入侵的方式,那么我們?nèi)绾稳シ婪赌�?這個就應該我們從代碼去入手了。
分享:用PHP生成中文拼音代碼以下為引用的內(nèi)容: php代碼: ?php class ChineseSpell { /** * @var array $chines
- 相關鏈接:
- 教程說明:
PHP教程-PHP代碼安全和SQL Injection防范
。