搜尋
首頁後端開發php教程focus magic php xfocus防注入資料

這裡沒有太深的技術含量,我只是比較簡單的談了一下。 (以下操作如無具體說 明,都是基於PHP+MySQL+Apache的情況) 在現在各種黑客橫行的時候,如何實現自己php代碼安全,保證程序和伺服器的安全是一個很重要的問題,我隨便看了下關於php安全的資料,並不是很 多,至少比asp少多了,呵呵,於是就想寫點東西,來防止這些可能出現的情況。這裡沒有太深的技術含量,我只是比較簡單的談了一下。 (以下操作如無具體說 明,都是基於PHP+MySQL+Apache的情況) 
    先來說安全問題,而我們先看兩篇文章:
http://www.xfocus.net /articles/200107/227.html     
http://www.xfocus.net/articles/200107/228.html
    上面文章是安全焦點上的關於PHP安全的介紹,基本上比較全面的了關於PHP的一些安全性問題。
    在PHP編碼的時候,如果考慮到一些比較基本的安全問題,首先一點:
1. 初始化你的變數
    為什麼這麼說呢?我們看下面的程式碼:
if ($admin)
{
    echo '登陸成功! ';
    include('admin.php');
}
else
{
    echo '你不是管理員,無法進行管理! ';
}
    好,我們看上面的程式碼好像是能正常運行,沒有問題,那麼加入我提交一個非法的參數過去呢,那麼效果會如何呢?例如我們的這個頁是 http://www.traget.com/login.php,那我們提交:http://www.target.com/login.php?admin=1,呵呵,你想一些,我們是不是直接就是管理員了,直接進行管理。
    當然,可能我們不會犯這麼簡單錯的錯誤,那麼一些很隱密的錯誤也可能導致這個問題,例如最近暴出來的phpwind 1.3.6論壇有個漏洞,導致能夠直接拿到管理員權限,就是因為有個$skin變數沒有初始化,導致了後面一連串問題。
    那我們要如何避免上面的問題呢?首先,從php.ini入手,把php.ini裡面的register_global = off,就是不是所有的註冊變數為全域,那麼就能避免了。但是,我們不是伺服器管理員,只能從程式碼上改進了,那我們要如何改進上面的程式碼呢?我們改寫如 下:
$admin = 0;      // 初始化變數
if ($_POST['admin_user'] && $_POST['admin_pass'])     // ...
    $admin = 1;
}
else }
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,基本上都是國內這兩年流行的技術,基本原理就是透過對提交變數的不過濾形成注入點然後使惡意使用者能夠提交一些sql查詢語句,導致重要資料被竊取、資料遺失或損壞,或被入侵到後台管理。
基本原理我就不說了,我們看看下面兩篇文章就很明白了:
http://www.4ngel.net/article/36.htm
http://www. 4ngel.net/article/30.htm
    那麼我們既然了解了基本的注射入侵的方式,那麼我們如何去防範呢?這個就應該我們從程式碼去入手了。
    我們知道Web上提交資料有兩種方式,一種是get、一種是post,那麼很多常見的sql注射就是從get方式入手的,而且注射的語句裡面一定是包含一些sql語句的,因為沒有sql語句,那麼如何進行,sql語句有四大句:
    select 、update、delete、insert,那麼我們如果在我們提交的資料中進行過濾是不是能夠避免這些問題呢?
    於是我們使用正規就建立以下函數:
/*
函數名稱:inject_check()
函數作用:偵測提交的值是不是含有SQL注射的字符,防止注射,保護伺服器安全
參考        數:$sql_str: 提交的變數
返 回 值:回傳偵測結果,ture or false
回饋{
     return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);  }
    我們函數把 select,insert,update,delete, union, into, load_file, outfile /*, ./ , ../ , ' 等等危險的參數的參數了,程式可以這樣建構:
if (inject_check($_GET['id']))
{
     exit('你提交的資料非法,請檢查後重新提交!');
}
else
{
    $id = $_GET['id'];
    echo '所提交的資料合法,請繼續! ';
}
?>
    假設我們提交URL為:http://www.target.com/a.php?id=1,那麼就會提示:
    "提交的資料合法,請繼續! "
    如果我們提交 http://www.target.com/a.php?id=1' select * from tb_name
    檢查後重新提交!
    但是,問題還沒解決,但我們提交的是 http://www.target.com/a.php?id=1asdfasdfasdf 呢,我們這個是符合上面的規則的,但是呢,它是不符合要求的,於是我們為了可能其他的情況,我們再建構一個函數來進行檢查:
/*
函數名稱:verify_id()
函數作用:校驗提交的ID類別值是否合法
參        數:$id: 提交的ID值
返 回 值:返回處理後的ID
函數作者:heiyeluren
*/
function {
   if (!$id) { exit('沒有提交參數!'); }    // 是否為空判斷
   elseif (inject_check($id))'{ ; }    // 注射判斷
   elseif (!is_numeric($id)) { exit('提交的參數非法!'); }   型化
   return  $id;
}
    呵呵,那麼我們就能夠進行校驗了,於是我們上面的程式碼就變成了下面的:
if (inject_check($_GET[check 'id']))
{
     exit('你提交的資料非法,請檢查後重新提交!');
}
else
{
   ($_GET['id']);    // 這裡引用了我們的過濾函數,對$id進行過濾
    echo '提交的資料合法,請繼續! ';
}
?>
    好,問題到這裡似乎都解決了,但是我們有沒有考慮過post提交的數據,大批量的數據呢?
    例如一些字元可能會對資料庫造成危害,例如 ' _ ', ' % ',而這些字元都有特殊意義,那麼我們如果進行控制呢?還有一點,就是當我們的php.ini裡面的magic_quotes_gpc = off 的時候,那麼提交的不符合資料庫規則的資料都是不會自動在前面加' '的,那麼我們要控制這些問題,於是建構如下函數:
/*
函數名稱:str_check()
函數作用:將提交的字串過濾
參    數:$var: 要處理的字串
返 回  數:$var: 要處理的字串
返 回:回傳過濾後的字串
函數作者:heiyeluren
*/
function str_check( $str )
{
   if  (!get_magic_quotes_gpc())/  {
      $str = addslashes($str);    // 過濾中過濾
}
     🎜>     $str = str_replace("%", "%", $str);    // 把' % '過濾掉
  被淪陷的危險。
    最後,再考慮提交一些大批量資料的情況,例如發貼,或者寫文章、新聞,我們需要一些函數來幫我們過濾和進行轉換,再上面函數的基礎上,我們構建如下函數:
/*
函數名稱:post_check()
函數作用:處理提交的編輯內容
參    數:$post: 要提交的內容
返    數:$post: 要提交的內容
返  值:$post: 返回過濾後的內容
函數作者:heiyeluren
*/
function post_check($post)
{
   if (!get_magic_quotes_gpc())))   
      $post = addslashes($post);    // 進行magic_quotes_gpc沒有開啟的狀況對提交資料的篩選
   }_$ / / 把 '_'過濾掉
   $post = str_replace("%", "%", $post);    // 將' % '車轉換
   $post= htmlspecialchars($post);    // html標記轉換
   return $post;
}     最後在告訴你上面表達的:1. 初始化你的變數  2. 一定記得過濾你的變因

以上就介紹了focus magic php xfocus防注入資料,包括了focus magic方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

您如何從PHP會話中檢索數據?您如何從PHP會話中檢索數據?May 01, 2025 am 12:11 AM

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

您如何使用會議來實施購物車?您如何使用會議來實施購物車?May 01, 2025 am 12:10 AM

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

您如何在PHP中創建和使用接口?您如何在PHP中創建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解釋瞭如何創建,實施和使用PHP中的接口,重點關注其對代碼組織和可維護性的好處。

crypt()和password_hash()有什麼區別?crypt()和password_hash()有什麼區別?Apr 30, 2025 pm 03:39 PM

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

如何防止PHP中的跨站點腳本(XSS)?如何防止PHP中的跨站點腳本(XSS)?Apr 30, 2025 pm 03:38 PM

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器