php的sql注入,php防止sql注入的方法有哪些

本文目錄一覽:

php防止sql注入以及xss跨站腳本攻擊

1.post數據

封裝轉義函數 防sql注入  eag:addslashes($username);addslashes($password); 

eag:防止sql注入函數封裝 

function deepslashes($data){

#判斷$data的表現形式 並且需要處理空的情況

if(empty($data)){

return($data);

}

#高級簡寫 return is_array($data) ? array_map(‘deepslashes’,$data) : addslashes($data);

#初級寫法

if(is_array($data)){

#遞歸循環遍歷處理多維數組

foreach ($data as $v) {

return deepslashes($v);

}

}else{

#單一變數

return addslashes($data);

}

#初級寫法

}

2.get數據

指url 傳參數導致sql發生改變

解決方案

①強制轉換,使用函數intval 或者 數據類型 的關鍵字int

②隱式轉換,通過運算,只需要+0即可

3.xss跨站腳本攻擊

指惡意攻擊向web頁面插入html、js標籤導致頁面出現錯誤

解決方案

轉義標籤” ”即可,有以下php函數可解決

htmlspecialchars 函數 和 htmlentites函數

eag:

function deepslashes($data){

#判斷$data的表現形式 並且需要處理空的情況

if(empty($data)){

return($data);

}

return is_array($data) ? array_map(‘deepslashes’,$data) : htmlspecialchars ($data);

}

淺談:在PHP中該怎樣防止SQL注入

使用預處理語句和參數化查詢。

禁止使用拼接sql語句,和參數類型驗證,就可以完全避免sql注入漏洞!

預處理語句和參數分別發送到資料庫伺服器進行解析,參數將會被當作普通字元處理。這種方式使得攻擊者無法注入惡意的SQL。 你有兩種選擇來實現該方法:

1、使用PDO:

$stmt=$pdo-prepare(‘SELECT * FROM employees WHERE name = :name’);

$stmt-execute(array(‘name’=$name));

foreach($stmtas$row) {

// do something with $row

}

2、使用mysqli:

$stmt = $dbConnection-prepare(‘SELECT * FROM employees WHERE name = ?’);

$stmt-bind_param(‘s’, $name);

$stmt-execute();

$result = $stmt-get_result();

while($row = $result-fetch_assoc()) {

// do something with $row

}

php如何防止sql注入

PHP防止sql注入是一個比較低級的問題了,這個問題其實在我大一上學期做第一個個人博客的時候就已經關注過了,不過簡單的說一下關於PHP防注入的方式吧。

使用PDO防注入。

這是最簡單直接的一種方式,當然低版本的PHP一般不支持PDO方式去操作,那麼就只能採用其它方式。

採用escape函數過濾非法字元。

escape可以將非法字元比如 斜杠等非法字元轉義,防止sql注入,這種方式簡單粗暴,但是不太建議這麼用。

自己手寫過濾函數,手寫一個php sql非法參數過濾函數來說還是比較簡單的,但是你的函數需要非常的健壯,不讓仍然有可能被非法黑客攻擊;你的Coding水平直接決定了你的函數的健壯性。

各種框架裡面其實都有對於非法字元過濾的支持,最簡單的比如ThinkPHP,你可以直接防止注入。

寫一個PHP擴展對於進入參數進行有選擇的過濾。 開發一個PHP擴展是對於一個PHP高級程序員必備的技能,將你需要的功能打包在PHP擴展裡面,就像黑詞過濾一樣進行檢查,是非常方便的。一般都是用在自己寫框架路由器轉發的時候,如果你用擴展實現框架的路由器轉發的話,可以順便將參數過濾加入到PHP擴展裡面,通過C去實現。

對於現在的防注入技術其實已經成熟了,對於一個站點該關心的不是防注入了,而是大規模高並發如何處理的問題,或者關於各種其他漏洞,比如現在世界上仍然有百分之80使用redis的站點存在redis漏洞,通過redis漏洞可以直接拿到機器的訪問許可權,一般來說都是直接給你種一個挖礦機器人來。

原創文章,作者:HHHY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131987.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HHHY的頭像HHHY
上一篇 2024-10-03 23:49
下一篇 2024-10-03 23:49

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python通配符有哪些

    Python通配符是一種表示字元串中模糊匹配的有效工具,用於匹配與具有特定模式匹配的字元串。Python中主要的通配符有:*,?,[]和{}。 一、星號通配符 * 在Python中…

    編程 2025-04-29

發表回復

登錄後才能評論