1. 程式人生 > >PHP中防XSS攻擊和防sql注入

PHP中防XSS攻擊和防sql注入

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);
}