① 如何正確運用PHP filter判斷過濾數據
PHP 5.2以及更高的版本,PHP filter被綁定於系統,它可以對數據進行自動的過濾和判斷。 第一種、PHP filter判斷一個變數的內容是否符合要求 使用函數filter_var,第一個參數是要判斷的變數。第二個參數是判斷的要求,FILTER_VALIDATE_EMAIL表示判斷是否符合email格式。如果變數是類似’[email protected]’的數據,系統就會完整的輸出‘[email protected]’。如果是錯誤的格式,比如’boy’,就會輸出false。如果沒有填寫表單中的email欄位,系統輸出空字元串。$email=‘[email protected]’; echofilter_var($email, FILTER_VALIDATE_EMAIL); 第二種、PHP filter根據要求過濾一個變數的內容 和上面唯一的不同是第二個參數使用FILTER_SANITIZE_EMAIL,輸出的結果會不同。如果變數是類似’[email protected]’的數據,系統就會完整的輸出’[email protected]’。如果是錯誤的格式,比如’boy-afds3′,只要是數字和字母和劃線等email格式中可以出現的內容,系統同樣會完整的輸出’boy-afds3′。如果變數沒有設置內容,系統輸出空字元串。如果是’boy阿三’,系統會把email格式中不允許的東西去除,輸出’boy’。$email=‘[email protected]’; echofilter_var($email, FILTER_SANITIZE_EMAIL); 第三種、PHP filter判斷輸入的變數的內容是否符合要求 使用函數filter_input。第一個參數表示從那裡獲得的數據,INPUT_POST表示通過POST方法傳遞過來,還可以使用INPUT_GET, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV,代表相應的途徑。第二個參數就是數據的名稱。第三個參數代表過濾的要求,FILTER_VALIDATE_EMAIL表示判斷數據是否符合email格式。 假設通過表單的POST過來的一個欄位email。如果是類似 ’[email protected]’ 的數據,系統就會完整的輸出’[email protected]’。如果是錯誤的格式,比如’boy’,就會輸出false。如果沒有填寫表單中的email欄位,系統輸出null,也就是空。 echofilter_input(INPUT_POST, ‘email’,FILTER_VALIDATE_EMAIL); 第四種、PHP filter根據要求過濾輸入的變數的內容 和上面唯一的不同是第二個參數使用FILTER_SANITIZE_EMAIL,輸出的結果會不同。假設通過表單的POST過來的一個欄位email。 如果是類似’[email protected]’的數據,系統就會完整的輸出’[email protected]’。如果是錯誤的格式,比如’boy-afds3′,只要是數字和字母和劃線等email格式中可以出現的內容,系統同樣會完整的輸出’boy-afds3′。如果沒有填寫表單中的email欄位,系統輸出null,也就是空。如果是’boy阿三’源碼天空 ,系統會把email格式中不允許的東西去除,輸出’boy’。 echofilter_input (INPUT_POST,‘email’,
② php 過濾掉超鏈接,及超鏈連內的網頁代碼
用正則表達式過濾掉所有HTML代碼
過濾所有html標簽的正則表達式:
</?[^>]+>
③ 如何防止跨站點腳本攻擊
你好~
XSS漏洞產生的原因:
跨站點腳本的主要原因是程序猿對用戶的信任。開發人員輕松地認為用戶永遠不會試圖執行什麼出格的事情,所以他們創建應用程序,卻沒有使用任何額外的代碼來過濾用戶輸入以阻止任何惡意活動。另一個原因是,這種攻擊有許多變體,用製造出一種行之有效的XSS過濾器是一件比較困難的事情。
但是這只是相對的,對用戶輸入數據的」編碼」和」過濾」在任何時候都是很重要的,我們必須採取一些針對性的手段對其進行防禦。
如何創造一個良好的XSS過濾器來阻止大多數XSS攻擊代碼
1 .需要重點」編碼」和」過濾」的對象
The URL
HTTP referrer objects
GET parameters from a form
POST parameters from a form
Window.location
Document.referrer
document.location
document.URL
document.URLUnencoded
cookie data
headers data
database data
防禦XSS有一個原則:
以當前的應用系統為中心,所有的進入應用系統的數據都看成是輸入數據(包括從FORM表單或者從資料庫獲取到的數據),所有從當前應用系統流出的數據都看作是輸出(包括輸出到用戶瀏覽器或向資料庫寫入數據)
對輸入的數據進行」過濾」,對輸出數據進行」編碼」。這里的」編碼」也要注意,必須針對數據具體的上下文語境進行針對性的編碼。例如數據是輸出到HTML中的那就要進行HtmlEncode,如果數據是輸出到javascript代碼中進行拼接的,那就要進行javascriptEncode。
如果不搞清楚數據具體輸出的語境,就有可能因為HtmlParser()和javascriptParser()兩種解析引擎的執行先後問題導致看似嚴密的」編碼」形同虛設。
2. HtmlEncode HTML編碼
它的作用是將字元轉換成HTMLEntities,對應的標準是ISO-8859-1
為了對抗XSS,在HtmlEncode中要求至少轉換以下字元:
& --> &
< --> <
> --> >
" --> "
' --> '
/ --> /
在PHP中:
htmlentities
http://www.w3school.com.cn/php/func_string_htmlentities.asp
htmlspecialchars
http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp
3. javascriptEncode javascript」編碼」
javascriptEncode與HtmlEncode的編碼方法不同,HtmlEncode是去編碼,而javascriptEncode更多的像轉義,它需要使用」\」對特殊字元進行轉義。從原理上來講,這都符合編碼函數的一個大原則: 將數據和代碼區分開,因為對於HTML Tag來說,我們對其進行」可視化(轉換成可以見字元)」的編碼可以將數據和HTML的界限分開。而對於javascript來說,我們除了要進行編碼之外,還需要對特殊字元進行轉義,這樣攻擊輸入的用於」閉合」的特殊字元就無法發揮作用,從而避免XSS攻擊,除此之外,在對抗XSS時,還要求輸出的變數必須在引號內部,以避免造成安全問題。
escape()
http://www.w3school.com.cn/js/jsref_escape.asp
該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ – _ + . / 。其他所有的字元都會被轉義序列(十六進制\xHH)替換。
利用這個編碼函數,不僅能防禦XSS攻擊,還可以防禦一些command注入。
一些開源的防禦XSS攻擊的代碼庫:
PHP AntiXSS
這是一個不錯的PHP庫,可以幫助開發人員增加一層保護,防止跨站腳本漏洞。
https://code.google.com/p/php-antixss/
xss_clean.php filter
https://gist.github.com/mbijon/1098477
HTML Purifier
http://htmlpurifier.org/
xssprotect
https://code.google.com/p/xssprotect/
XSS HTML Filter
http://finn-no.github.io/xss-html-filter/
原文地址:http://resources.infosecinstitute.com/how-to-prevent-cross-site-scripting-attacks/
希望可以幫助到你~望採納哦~謝謝~
④ 如何實現php的安全最大化怎樣避免sql注入漏洞和xss跨站腳本攻擊漏洞
使用php安全模式復
伺服器要做制好管理,賬號許可權是否合理。
假定所有用戶的輸入都是「惡意」的,防止XSS攻擊,譬如:對用戶的輸入輸出做好必要的過濾
防止CSRF,表單設置隱藏域,post一個隨機字元串到後台,可以有效防止跨站請求偽造。
文件上傳,檢查是否做好效驗,要注意上傳文件存儲目錄許可權。
防禦SQL注入。
1.使用預編譯語句
2.使用安全的存儲過程
3.檢查輸入數據的數據類型
4.從資料庫自身的角度考慮,應該使用最小許可權原則,不可使用root或dbowner的身份連接資料庫。若多個應用使用同一個資料庫,也應該為資料庫分配不同的賬戶。web應用使用的資料庫賬戶,不應該有創建自定義函數,操作本地文件的許可權。
1.假定所有用戶輸入都是「邪惡」的
2.考慮周全的正則表達式
3.為cookie設置HttpOnly,防止cookie劫持
4.外部js不一定可靠
5.出去不必要的HTML注釋
6. 針對非法的HTML代碼包括單雙引號等,使用htmlspecialchars()函數。