第一種:XSS
- 全名:Cross-site scripting,中文為 跨網站指令碼攻擊,泛指通過利用網頁開發時留下的漏洞,通常是 JavaScript,但也可能是 Java、VBScript、ActiveX、Flash 或者甚至是普通的 HTML。
- 會有什麼問題?
- 透過指令碼以被攻擊使用者的身份執行一些管理動作,就有可能偷到使用者的資料,比如:密碼。
- 透過指令碼將使用者導到釣魚網站。
攻擊範例
小提醒:請勿在現行網站任意測試,若真的發現問題也請主動通知網站開發者哦!
測試網站類型:留言板
留言板的功能是可以讓使用者輸入訊息後顯示在網站上,因此如果我們在留言的內容中輸入惡意的語法會發生什麼事呢?
第一種: html
xss 攻擊測試 注入 html
<h1 style="color: red;">xss 攻擊</h1>
第二種: JavaScript
xss 攻擊測試 注入 js
<script>alert('xss 攻擊');</script>
漏洞防禦方法
在網站顯示使用的內容時,對內容進行過濾,針對某些特殊字元進行跳脫或轉換,許多語言都有提供方法,這邊以 PHP 做示意:
htmlspecialchars()
- 把預定義的特殊字元轉換成 HTML 僅能顯示用的編碼
- 語法:
htmlspecialchars( $string , $quote_flags , $encoding , $double_encode )
- $string:需轉換的字串。
- $quote_flags:用來設定對引號的轉換,基本上建議使用 ENT_QUOTES 單雙引號都轉換(預設是僅轉換雙引號)。
- $encoding:用來設定要轉換的編碼,預設值則是 UTF-8。
- $double_encode: 是否要對全部進行轉換,預設值是轉換全部的 HTML 碼。
- 範例:
可以將此方法包成一個 function 方便使用
function escape($str) { return htmlspecialchars($str, ENT_QUOTES);}
將會顯示使用者輸入內容的地方都進行轉換
<div><?php echo escape($content); ?></div>
第二種:SQL Injection
SQL 常使用於 database 系統中,因此攻擊者可以透過更改語法邏輯或加入特殊指令的方式,擅自竊取、修改資料。
- 會有什麼問題?
- 透過指令碼以被攻擊使用者的身份執行一些管理動作,就有可能偷到使用者的資料,比如:密碼。
- 透過指令碼修改 database 的資料,比如:去竄改 apple 購物網站上 iphone 的售價 0。
攻擊範例
小提醒:請勿在現行網站任意測試,若真的發現問題也請主動通知網站開發者哦!
— 測試網站類型:留言板
— 後端語言:PHP
— 新增留言的是使用 sprintf() 做字串拼接
留言內容:撈出 username 為 eee 的使用者密碼
"), ("eee", (select password from users limit 1)) #
漏洞防禦方法:prepared statement
中文為「參數化查詢」是指在使用資料庫語法時,在需要填入數值或資料的地方,使用參數來給值,這邊以 PHP 做示意:
其實上述兩種攻擊都是採用相同的手法,在使用者能輸入的資料當中注入惡意語法來攻擊網站,因此在資訊安全的概念中必須記住一個法則
永遠不要相信 Client 端傳過來的東西
有了這個思維就可以避免掉許多惡意攻擊
參考資料
以上有任何錯誤的地方歡迎指正,感謝。