概念:惡意攻擊者往Web頁面裏插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的html代碼會被執行,從而達到惡意用戶的特殊目的。javascript
危害:php
描述:反射型跨站。GET或POST內容未過濾,能夠提交JS以及HTML等惡意代碼。html
代碼:java
解決方法:mysql
輸出過濾,PHP端輸出到view的模板頁面上的數據都須要通過過濾:程序員
概念:CSRF跨站請求僞造,也被稱成爲「one click attack」或者session riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。web
危害:強迫受害者的瀏覽器向一個易受攻擊的Web應用程序發送請求,最後達到攻擊者所須要的操做行爲。sql
例子:數據庫
- <img src=「http://a.com/addfriend.php?id=123」/>
1. 上面是一個圖片的html標籤,可是src中是一個添加id爲123好友的新增好友連接。瀏覽器
2. 惡意用戶能夠將這段代碼植入其它網站網頁上面,甚至能夠img設置爲0,0,讓用戶不知不覺中點擊這個連接,達到用戶並不像加這我的好友,可是添加的目的。
3. 當不少人都無心加了id爲123這我的爲好友的時候,id爲123的惡意用戶就有權限來查看這些人的信息,甚至能夠發送不少惡意的信息,達到惡意用戶的目的。
解決方法:
1. http://a.com/addfriend.php?id=123 使用POST方法會相對安全一點。
2. 採用相似隨即碼或者令牌的形式,讓用戶操做惟一性。 (每次用戶登陸網站隨機生成一個token,存放在cookie中,用戶的全部操做中都須要通過token驗證)
帶上這個init_token,而後每次請求都去驗證一下就行了。token在瀏覽器打開的時候生效,關閉瀏覽器再打開瀏覽器的時候會變化
flash安全問題
例子:
- http://images.sohu.com/bill/s2010/liulin/nokia/1602600902.swf?clickthru=javascript:alert(1)
解決方法:在網站根目錄中,添加crossdomain.xml文件,這個文件主要是控制flash的域訪問。
淘寶的:http://www.taobao.com/crossdomain.xml
- <?xml version="1.0" ?>
- <cross-domain-policy>
- <allow-access-from domain="*.taobao.com" />
- <allow-access-from domain="*.taobao.net" />
- <allow-access-from domain="*.taobaocdn.com" />
- <allow-access-from domain="*.tbcdn.cn" />
- <allow-access-from domain="*.allyes.com" />
- </cross-domain-policy>
sql注入安全問題
概念:所謂SQL注入,就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
危害:
1. 查詢數據庫中敏感信息。
2. 繞過認證。
3. 添加、刪除、修改服務器數據。
4. 拒絕服務。?id=(BENCHMARK(100000000, MD5(RAND()));
例子:
- $sql = "SELECT name FROM users WHERE id = '". $_GET['id'] . "'";
當ID值爲:1’ or 1=’1 SQL語句(已測試能夠注入):
- SELECT name FROM users WHERE id = ‘1’ or 1=’1 ‘
說明:1=1的時候,條件語句WHEREOR以前的不起做用。 ‘的做用是組裝SQL語句。
解決方法:
SQL組裝的時候,對外部變量以及全部變量都進行過濾:
PHPWIND中,能夠用sqlEscape、sqlImplode、sqlSingle、sqlMulti等函數過濾組裝。過濾主要是一些’單引號這些能夠破壞SQL組裝的數據。
- /**
- * SQL組裝-私有SQL過濾
- * @param string $val 過濾的值
- * @param int $iskey 0-過濾value值,1-過濾字段
- * @return string
- */
- private function build_escape_single($val, $iskey = 0) {
- if ($iskey === 0) {
- if (is_numeric($val)) {
- return " '" . $val . "' ";
- } else {
- return " '" . addslashes(stripslashes($val)) . "' ";
- }
- } else {
- $val = str_replace(array('`', ' '), '', $val);
- return ' `'.addslashes(stripslashes($val)).'` ';
- }
- }
XML注入安全問題
概念:和SQL注入原理同樣,XML是存儲數據的地方,若是在查詢或修改時,若是沒有作轉義,直接輸入或輸出數據,都將致使XML注入漏洞。攻擊者能夠修改XML數據格式,增長新的XML節點,對數據處理流程產生影響。
危害:
1. 攻擊者能夠新增XML節點
2. 破壞原來的XML結構,影響業務流程,甚至產生嚴重的錯誤。
例子:
- $xml = "<USER role=guest><name>「 . $_GET[‘name’] . "</name><email>「 . $_GET[‘email’] . "</email></USER>";
須要獲得的XML結構:
- <?xml version="1.0" encoding="UTF-8"?>
- <USER role=guest>
- <name>user1</name>
- <email>user1@a.com</email>
- </USER>
惡意代碼:
- user1@a.com</email></USER><USER role=admin><name>test</name><email>user2@a.com
意外的XML文檔:
- <?xml version="1.0" encoding="UTF-8"?>
- <USER role=guest>
- <name>user1</name>
- <email>user1@a.com</email>
- </USER>
- <USER role=admin>
- <name>test</name>
- <email>user2@a.com</email>
- </USER>
解決方法:
1. 對php處理XML文檔的時候,進行標籤過濾
2. 儘可能減小直接被外部訪問到xml文檔,能夠採用文件名用散列方法等。
url跳轉漏洞
概念:Web應用程序接收到用戶提交的URL參數後,沒有對參數作」可信任URL」的驗證,就向用戶瀏覽器返回跳轉到該URL的指令。
危害:釣魚網站
例子:
http://m.yahoo.cn/log.php?c=web&u=http://www.163.com
解決方法:
對跳轉的php函數進行進一步優化,使頁面跳轉能夠在可信任的範圍內。 例如能夠有跳轉域名白名單方法,這個訪問各大公司使用比較多
文件系統跨越漏洞
概念:對文件目錄參數沒有進行過濾,致使惡意用戶能夠經過在參數中輸入一些執行命令,或者跨越訪問的行爲,來超出用戶的訪問權限。
例子:經過一個或多個../跨越目錄限制
- $fp = fopen("image/{$_GET['filename']}", 'r');
Getfile?filename=../../../../etc/passwd
解決方法:
1. 對文本操做的時候必定要謹慎,不可信任
2. 嚴格使用phpwind中安全類庫 escapePath函數
系統命令漏洞
概念:用戶提交的參數用於執行系統命令的參數。
解決:
1. 謹慎使用系統命令,對使用系統命令的地方須要進行安全評審
2. 對命令語句進行嚴格過濾
文件上傳漏洞
概念:Web應用程序在處理用戶上傳的文件時,沒有判斷文件的擴展名是否在容許的範圍內,或者沒檢測文件內容的合法性,就把文件保存在服務器上,甚至上傳腳本木馬到web服務器上,直接控制web服務器。
狀況:
1. 未限制擴展名
2. 未檢查文件內容
3. 病毒文件
解決方法:
1. 使用安全的,可信任的上傳組件。
2. 檢查文件擴展名,保證文件的類型正確。
3. 檢查文件內容,保證用戶不僞造文件類型。
任意文件下載漏洞
解決方法:
1. Apache虛擬目錄指向
2. Java/PHP讀取文件
權限控制漏洞
概念:屬於業務邏輯上的安全管理。
訪問控制:
1. 水平訪問:Web應用程序接收到用戶請求,修改某條數據時,沒有判斷數據的所屬人,或判斷數據所屬人時,從用戶提交的request參數(用戶可控數據)中,獲取了數據所屬人id,致使惡意攻擊者能夠經過變換數據ID,或變換所屬人id,修改不屬於本身的數據。
2. 垂直訪問:因爲web應用程序沒有作權限控制,或僅僅在菜單上作了權限控制,致使的惡意用戶只要猜想其餘管理頁面的URL,就能夠訪問或控制其餘角色擁有的數據或頁面,達到權限提高目的。
存在狀況:
1. URL級別的。(例如論壇須要操做評分的時候,有一個提交的URL地址,該地址提交過去,若是不作權限判斷,那麼惡意用戶就能夠隨意的拿這個URL地址來進行惡意行爲)
2. 菜單級別。(會員中心或者後臺管理中心,會有菜單,管理員能夠看到多個功能,普通管理員只能看到一部分功能。可是若是你對管理員操做的功能區不作權限判斷,那麼普通管理員只要猜想或者獲取管理區的URL,就能夠進行管理員操做了)
危害:
1. 屬於業務邏輯的漏洞,這些危害性是巨大的,可讓普通用戶就可能獲取管理員的權限,對網站進行惡意破壞或者作非法行爲。
解決方案:
1. 項目先期,作一份詳細的權限規劃文檔。
2. 在開發中嚴格按照權限文檔的要求去作權限。
3. 後期測試須要覆蓋權限這一塊功能區。
4. 程序員須要常常注意這些方面的要求。
cookie安全設置
解決:
cookie httponly flag : 在用到用戶名登錄密碼之類的安全性比較高的cookie的時候,能夠在cookie中設置httponly屬性,該屬性只容許php等訪問cookie,而不容許js訪問。
cookie secure flag : 在涉及到https這樣的狀況,須要對cookie加密傳輸,那麼能夠設置這個屬性
session安全
1. SESSION是保存在服務器端的,具備比COOKIE必定的安全性。
2. 使用COOKIE的時候,若是長時間沒有動做,能夠設置一個時間值,來對COOKIE進行過時。
3. 儘可能讓用戶每次的cookie值都是不一樣的,這樣能夠保證cookie被盜取也不能長期使用的問題。
網絡請求數據都須要判斷
HTTPS
敏感信息,請走HTTPS
出處:http://blog.csdn.net/erjian666/article/details/53289763