PHP中防XSS攻擊和防sql注入
阿新 • • 發佈:2019-01-10
SQL注入如何防?
TP中的底層已經做了防SQL注入的操作,只要我們操作資料庫時使用TP提供給我們的方法就不會有問題,如新增商品時我們呼叫了add方法。唯一要注意的就是如果我們自己拼SQL執行時就要自己來過濾了。
總結:如果要自己拼SQL語句,一定要自己再過濾一下【addslashes】,也不是直接就能過濾,還要考慮PHP伺服器有沒有開啟自動過濾的功能,如果伺服器已經開啟自動過濾的功能我們就不能再過濾,只有沒有開啟時才需要手動過濾:
注意:
1.不要兩次過濾,原先是在單引號前加轉義符,如果兩次過濾就是\\',就失去了原來的意義的。
2.以前有一種寫法是直接在輸入框加個;分號,然後再寫一句SQL語句,這種方法對asp有效,但是對php無效,因為php預設每次只能執行一條sql語句。
防XSS跨站指令碼攻擊:
1.使用htmlspecialchars函式進行過濾;
注意:
PHP5.3中這個函式有了第二個引數,設定了第二個引數會將單引號轉換為'這樣的實體,也可以防止SQL注入,因為這個符號對SQL並沒有什麼卵用。
用法:
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
2.這裡要注意一點,對於富文字編輯器的內容要特殊過濾,保留HTML和CSS這些內容,把script標籤及其裡面的內容刪除;
3.特殊過濾(有選擇性的過濾),採用第三方外掛,Htmlpurifier
// 過濾XSS function clearXSS($string) { require_once './htmlpurifier/HTMLPurifier.auto.php'; // 生成配置物件 $_clean_xss_config = HTMLPurifier_Config::createDefault(); // 以下就是配置: $_clean_xss_config->set('Core.Encoding', 'UTF-8'); // 設定允許使用的HTML標籤 $_clean_xss_config->set('HTML.Allowed','div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]'); // 設定允許出現的CSS樣式屬性 $_clean_xss_config->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align'); // 設定a標籤上是否允許使用target="_blank" $_clean_xss_config->set('HTML.TargetBlank', TRUE); // 使用配置生成過濾用的物件 $_clean_xss_obj = new HTMLPurifier($_clean_xss_config); // 過濾字串 //將script標籤和其裡面的內容都過濾掉 return $_clean_xss_obj->purify($string); }