本文目錄一覽:
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