ØÙ ÙÙâÛ âclickjackingâ Ø¨Ù ÛÚ© ØµÙØÙâÛ Ø´ÛØ·Ø§ÙÛ Ø§Ø¬Ø§Ø²Ù Ù ÛâØ¯ÙØ¯ تا رÙÛ âØ³Ø§ÛØª ÙØ±Ø¨Ø§ÙÛâ Ø§Ø² Ø·Ø±Ù Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù Ú©ÙÛÚ© Ú©ÙØ¯.
تعداد Ø²ÛØ§Ø¯Û از Ø³Ø§ÛØªâÙØ§ با اÛ٠را٠ÙÚ© Ù ÛâØ´ÙÙØ¯Ø شا٠٠TwitterØ FacebookØ Paypal Ù Ø³Ø§ÛØªâÙØ§Û دÛگر. Ø§ÙØ¨ØªÙ ÙÙ ÙâÛ Ø¢ÙâÙØ§ درست شدÙâØ§ÙØ¯.
Ø§ÛØ¯Ù
Ø§ÛØ¯Ù Ø¨Ø³ÛØ§Ø± ساد٠است.
اÛÙØ¬Ø§ Ù ÛâÚ¯ÙÛÛÙ Ú©Ù clickjacking ÚÚ¯ÙÙ٠با Facebook Ø§ÙØ¬Ø§Ù شد:
- ÛÚ© Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù Ø¨Ù ØµÙØÙâÛ Ø´ÛØ·Ø§ÙÛ Ø§ØºÙØ§ Ù ÛâØ´ÙØ¯. Ù ÙÙ ÙÛØ³Øª ÚÚ¯ÙÙÙ.
- اÛÙ ØµÙØÙ Ø¯Ø±ÙÙ Ø®ÙØ¯ ÛÚ© ÙÛÙÚ© Ø¨Ù Ø¸Ø§ÙØ± ØºÛØ±Ø¢Ø³ÛØ¨âØ²ÙÙØ¯Ù دارد (Ù Ø«Ø§Ù âØ§ÙØ§Ù Ø«Ø±ÙØªÙ ÙØ¯ Ø´ÙÛØ¯â ÛØ§ âØ§ÛÙØ¬Ø§ Ú©ÙÛÚ© Ú©ÙÛØ¯Øâ Ø¨Ø³ÛØ§Ø± با٠ز٠استâ).
- رÙÛ Ø¢Ù ÙÛÙÚ©Ø Ø¢Ù ØµÙØÙâÛ Ø´ÛØ·Ø§ÙÛ ÛÚ©
<iframe>Ø´ÙØ§Ù باsrcاز facebook.com ÙØ±Ø§Ø± Ù ÛâØ¯ÙØ¯Ø Ø¨Ù Ø·ÙØ±Û ک٠دک٠ÙâÛ âÙ¾Ø³ÙØ¯ÛدÙâ Ø¯Ø±Ø³Øª Ø¨Ø§ÙØ§Û ÙÛÙÚ© است. ٠ع٠ÙÙØ§ اÛ٠کار باz-indexØ§ÙØ¬Ø§Ù Ù ÛâØ´ÙØ¯. - در ØªÙØ§Ø´ Ø¨Ø±Ø§Û Ú©ÙÛÚ© کرد٠ÙÛÙÚ©Ø Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù در ÙØ§Ùع رÙÛ Ø¯Ú©Ù Ù Ú©ÙÛÚ© Ù ÛâÚ©ÙØ¯.
ÙØ³Ø®ÙâÛ ÙÙ Ø§ÛØ´Û
اÛÙØ¬Ø§ Ù
ÛâØ¨ÛÙÛÙ
Ú©Ù ØµÙØÙâÛ Ø´ÛØ·Ø§ÙÛ ÚÚ¯ÙÙÙ Ø¨Ù ÙØ¸Ø± Ù
ÛâØ±Ø³Ø¯. Ø¨Ø±Ø§Û ÙØ§Ø¶Ø شد٠ÙÙ
Ù ÚÛØ²Ø <iframe> ÙÛÙ
ÙâØ´ÙØ§Ù است (در ØµÙØØ§Øª Ø´ÛØ·Ø§ÙÛ ÙØ§ÙØ¹ÛØ کاÙ
ÙØ§ Ø´ÙØ§Ù است):
<style>
iframe { /* از Ø³Ø§ÛØª ÙØ±Ø¨Ø§ÙÛ iframe */
width: 400px;
height: 100px;
position: absolute;
top:0; left:-20px;
opacity: 0.5; /* opacity:0 در ÙØ§Ùع */
z-index: 1;
}
</style>
<div>Ú©ÙÛÚ© Ú©ÙÛØ¯ تا Ø§ÙØ§Ù Ø«Ø±ÙØªÙ
ÙØ¯ Ø´ÙÛØ¯:</div>
<!-- ÙÛÙÚ© Ø³Ø§ÛØª ÙØ±Ø¨Ø§ÙÛ -->
<iframe src="/clickjacking/facebook.html"></iframe>
<button>!اÛÙØ¬Ø§ Ú©ÙÛÚ© Ú©ÙÛØ¯</button>
<div>!Ù Ø´Ù
ا Ø¨Ø§ØØ§Ù ÙØ³ØªÛد(در ÙØ§Ùع Ù
Ù ÛÚ© Ùکر Ø¨Ø§ØØ§Ù ÙØ³ØªÙ
)...</div>
ÙØ³Ø®ÙâÛ ÙÙ Ø§ÛØ´Û کا٠٠اÛÙ ØÙ ÙÙ:
<!DOCTYPE HTML>
<html>
<body style="margin:10px;padding:10px">
<input type="button" onclick="alert('ÙØ´Ø§Ø± داد٠شد facebook.html ÙØ§ÛÚ© در')" value="I LIKE IT !">
</body>
</html><!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<style>
iframe {
width: 400px;
height: 100px;
position: absolute;
top: 5px;
left: -14px;
opacity: 0.5;
z-index: 1;
}
</style>
<div>:Ú©ÙÛÚ© Ú©ÙÛØ¯ تا Ø§ÙØ§Ù Ø«Ø±ÙØªÙ
ÙØ¯ Ø´ÙÛØ¯</div>
<!-- ÙÛÙÚ© Ø³Ø§ÛØª ÙØ±Ø¨Ø§ÙÛ -->
<iframe src="facebook.html"></iframe>
<button>اÛÙØ¬Ø§ Ú©ÙÛÚ© Ú©ÙÛØ¯!</button>
<div>...Ù ØªÙ Ø¨Ø§ØØ§Ù ÙØ³ØªÛ (در ÙØ§Ùع Ù
Ù ÛÚ© Ùکر Ø¨Ø§ØØ§Ù ÙØ³ØªÙ
)</div>
</body>
</html>اÛÙØ¬Ø§ Ù
ا ÛÚ© <iframe src="facebook.html"> ÙÛÙ
ÙâØ´ÙØ§Ù دارÛÙ
Ø Ù Ø¯Ø± Ù
ثا٠Ù
ÛâØªÙØ§ÙÛÙ
ببÛÙÛÙ
ک٠رÙÛ Ø¯Ú©Ù
Ù Ø´ÙØ§Ùر است. ÛÚ© Ú©ÙÛÚ© رÙÛ Ø¯Ú©Ù
٠در ÙØ§Ùع رÙÛ iframe Ú©ÙÛÚ© Ù
ÛâÚ©ÙØ¯Ø اÙ
ا اÛÙ Ø¨Ø±Ø§Û Ú©Ø§Ø±Ø¨Ø± ÙØ§Ø¨Ù Ø¯ÛØ¯Ù ÙÛØ³ØªØ ÚÙÙ iframe Ø´ÙØ§Ù است.
در ÙØªÛØ¬ÙØâØ§Ú¯Ø± Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù در Facebook ٠جاز باشد (٠ع٠ÙÙØ§ â٠را ب٠خاطر Ø¨Ø³Ù¾Ø§Ø±â Ø±Ùش٠است)Ø Ø¢Ùگا٠ÛÚ© âÙ¾Ø³ÙØ¯ÛØ¯Ù â Ø§Ø¶Ø§ÙÙ Ù ÛâÚ©ÙØ¯. در TwitterØ Ø§ÛÙ ÛÚ© دک٠ÙâÛ âØ¯ÙØ¨Ø§Ù کردÙâ Ø®ÙØ§ÙØ¯ Ø¨ÙØ¯.
اÛÙØ¬Ø§ Ù
ثا٠ÙÙ
ÙÙ٠را دارÛÙ
Ø Ø§Ù
ا ÙØ²Ø¯ÛÚ©âØªØ± Ø¨Ù ÙØ§ÙØ¹ÛØªØ با opacity:0 Ø¨Ø±Ø§Û <iframe>:
<!DOCTYPE HTML>
<html>
<body style="margin:10px;padding:10px">
<input type="button" onclick="alert('!ÙØ´Ø§Ø± داد٠شد facebook.html ÙØ§ÛÚ© در')" value="I LIKE IT !">
</body>
</html><!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<style>
iframe {
width: 400px;
height: 100px;
position: absolute;
top: 5px;
left: -14px;
opacity: 0;
z-index: 1;
}
</style>
<div>Ú©ÙÛÚ© Ú©ÙÛØ¯ تا Ø§ÙØ§Ù Ø«Ø±ÙØªÙ
ÙØ¯ Ø´ÙÛØ¯:</div>
<!-- ÙÛÙÚ© Ø³Ø§ÛØª ÙØ±Ø¨Ø§ÙÛ -->
<iframe src="facebook.html"></iframe>
<button>Click here!</button>
<div>...Ù ØªÙ Ø¨Ø§ØØ§Ù ÙØ³ØªÛ (در ÙØ§Ùع Ù
Ù ÛÚ© Ùکر Ø¨Ø§ØØ§Ù ÙØ³ØªÙ
)!</div>
</body>
</html>تÙ
اÙ
ÚÛØ²Û Ú©Ù Ø¨Ø±Ø§Û ØÙ
ÙÙ ÙÛØ§Ø² دارÛÙ
â Ø§Û٠است Ú©Ù <iframe> را در ØµÙØÙâÛ Ø´ÛØ·Ø§ÙÛ Ø¨Ù Ú¯ÙÙÙâØ§Û ÙØ±Ø§Ø± دÙÛÙ
ک٠دکÙ
٠درست رÙÛ ÙÛÙÚ© باشد. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ ÙÙØªÛ ÛÚ© کاربر رÙÛ ÙÛÙÚ© Ú©ÙÛÚ© Ù
ÛâÚ©ÙØ¯Ø در ÙØ§Ùع رÙÛ Ø¯Ú©Ù
Ù Ú©ÙÛÚ© Ù
ÛâÚ©ÙØ¯. اÛÙ Ù
عÙ
ÙÙØ§ با CSS ÙØ§Ø¨Ù Ø§ÙØ¬Ø§Ù
است.
اÛÙ ØÙ ÙÙ ÙÙØ· ÙØ¹Ø§ÙÛØªâÙØ§Û با Ù ÙØ´ را ØªØØª ØªØ§Ø«ÛØ± ÙØ±Ø§Ø± Ù ÛâØ¯ÙØ¯ (ÛØ§ Ù Ø´Ø§Ø¨ÙØâ ٠ث٠ضربÙâÙØ§ رÙÛ ØªÙÙÙ Ù٠راÙ).
.ÙÙÚ©ÙØ³ Ù ÛâÚ©ÙØ¯ iframe داخ٠input ک٠در ØµÙØÙ Ù ÛâØ¨ÛÙØ¯ ÙÙÚ©ÙØ³ Ú©ÙØ¯Ø در ÙØ§Ùع رÙÛ input را ب٠گÙÙÙâØ§Û ÙØ±Ø§Ø± دÙÛÙ Ú©Ù ÙÛÙØ¯ÙØ§Û Ù ØªÙÛ Ø±ÙÛ ÛکدÛگر ÙÙ Ù¾ÙØ´Ø§ÙÛ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯.Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙÙØªÛ ÛÚ© Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù ØªÙØ§Ø´ Ù ÛâÚ©ÙØ¯ ک٠رÙÛ ÛÚ© iframe تغÛÛØ± Ù Ø³ÛØ± ÙØ±ÙØ¯Û ØµÙØÙâÚ©ÙÛØ¯ Ø¨Ø³ÛØ§Ø± Ø¯Ø´ÙØ§Ø± است. از ÙØ¸Ø± ÙÙÛØ اگر ÛÚ© ÙÛÙØ¯ ٠تÙÛ Ø¨Ø±Ø§Û ÙÚ© داشت٠باشÛÙ Ø Ù ÛâØªÙØ§ÙÛÙ ÛÚ©
.ÙØ§Ø¨Ù Ø¯ÛØ¯Ù ÙÛØ³Øª iframe ØØ§Ù ا Ø¢Ùگا٠ÛÚ© Ù Ø´Ú©Ù ÙØ¬Ùد دارد. ÙØ±ÚÛØ²Û Ú©Ù ÛÚ© Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù تاÛÙ¾ Ù ÛâÚ©ÙØ¯ Ù¾ÙÙØ§Ù Ù ÛâØ´ÙØ¯ ÚÙÙ
٠رد٠٠ع٠ÙÙØ§ ÙÙØªÛ ÙÙ ÛâØªÙØ§ÙÙØ¯ Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§Û Ø¬Ø¯ÛØ¯ را در ØØ§Ù ÚØ§Ù¾ شد٠رÙÛ ØµÙØÙâÙÙ Ø§ÛØ´ ببÛÙÙØ¯ تاÛÙ¾ کرد٠را ٠تÙÙÙ Ù ÛâÚ©ÙÙØ¯.
Ø¯ÙØ§Ø¹ ÙØ¯ÛÙ Û (ضعÛÙ)
ÙØ¯ÛÙ ÛâØªØ±ÛÙ Ø¯ÙØ§Ø¹ Ú©Ù Û JavaScript است ک٠باز کرد٠ÛÚ© ØµÙØÙ Ø¯Ø± ÛÚ© ÙØ±Û٠را Ù Ù ÙÙØ¹ Ù ÛâÚ©ÙØ¯ (Ø¨Ù Ø§ØµØ·ÙØ§Ø âframebustingâ)
آ٠شبÛ٠اÛ٠است:
if (top != window) {
top.location = window.location;
}
ÛØ¹ÙÛ: اگر Ù¾ÙØ¬Ø±Ù Ù ØªÙØ¬Ù Ø´ÙØ¯ ک٠در Ø¨Ø§ÙØ§ ÙÛØ³ØªØ Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± Ø®ÙØ¯ را در Ø¨Ø§ÙØ§Û ØµÙØÙ ÙØ±Ø§Ø± Ù ÛâØ¯ÙØ¯.
اÛÙ ÛÚ© Ø¯ÙØ§Ø¹ ÙØ§Ø¨Ù اعت٠اد ÙÛØ³ØªØ ÚÙ٠راÙâÙØ§Û Ø²ÛØ§Ø¯Û ÙØ¬Ùد دارد Ú©Ù ÙÚ© Ø¢Ù ÙØ¬Ùد دارد. Ø¨ÛØ§ÛÛØ¯ ÚÙØ¯ Ù ÙØ±Ø¯ را Ù¾ÙØ´Ø´ دÙÛÙ .
Ù Ø³Ø¯ÙØ¯ کرد٠top-navigation
Ù
ÛâØªÙØ§ÙÛÙ
transition ÙØ§Ø´Û از تغÛÛØ± top.location را در event handler beforeunload Ù
Ø³Ø¯ÙØ¯ Ú©ÙÛÙ
.
ØµÙØÙâÛ Ø¨Ø§ÙØ§ (Ú©Ù ÛÚ© Ù ÙØ±Ø¯ را Ù ØØµÙر Ù ÛâÚ©ÙØ¯Ø ٠تعÙ٠ب٠Ùکر است) ÛÚ© preventing handler را Ø¨Ø±Ø§Û Ø¢Ù ØªÙØ¸ÛÙ Ù ÛâÚ©ÙØ¯Ø ٠اÙÙØ¯ اÛÙ:
window.onbeforeunload = function() {
return false;
};
ÙÙØªÛ iframe ØªÙØ§Ø´ Ù
ÛâÚ©ÙØ¯ top.location را تغÛÛØ± Ø¯ÙØ¯Ø Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù Ù¾ÛØ§Ù
Û Ù
ÛâÚ¯ÛØ±Ø¯ Ú©Ù Ù
Ûâپرسد Ù
ÛâØ®ÙØ§ÙÙØ¯ ترک Ú©ÙÙØ¯ ÛØ§ ÙÙ.
در Ø¨ÛØ´ØªØ± Ù
ÙØ§Ø±Ø¯Ø Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù پاسخ Ù
ÙÙÛ Ù
ÛâØ¯ÙØ¯Ø Ø²ÛØ±Ø§ از iframe Ø§Ø·ÙØ§Ø¹Û ÙØ¯Ø§Ø±Ø¯ â ØªÙÙØ§ ÚÛØ²Û Ú©Ù Ù
ÛâØªÙØ§ÙÙØ¯ ببÛÙÙØ¯ ØµÙØÙ Ø¨Ø§ÙØ§ÛÛ Ø§Ø³ØªØ Ø¯ÙÛÙÛ Ø¨Ø±Ø§Û ØªØ±Ú© Ø¢Ù ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ top.location تغÛÛØ±Û ÙØ®ÙØ§ÙØ¯ کرد.
در ع٠Ù:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div> تغÛÛØ± Ù
ÛâØ¯ÙØ¯ javascript.info را ب٠top.location </div>
<script>
top.location = 'https://javascript.info';
</script>
</body>
</html><!doctype html>
<html>
<head>
<meta charset="UTF-8">
<style>
iframe {
width: 400px;
height: 100px;
position: absolute;
top: 0;
left: -20px;
opacity: 0;
z-index: 1;
}
</style>
<script>
function attack() {
window.onbeforeunload = function() {
window.onbeforeunload = null;
return "Ù
ÛâØ®ÙØ§ÙÛ Ø¨Ø¯Ù٠اÛÙک٠تÙ
اÙ
Ø±Ø§Ø²ÙØ§ را ÛØ§Ø¯Ø¨Ú¯ÛØ±Û Ø¨Ø±ÙÛØ (ÙØ§-ÙØ§)";
};
document.body.insertAdjacentHTML('beforeend', '<iframe src="iframe.html">');
}
</script>
</head>
<body>
<p>بعد از ÛÚ© Ú©ÙÛÚ© رÙÛ Ø¯Ú©Ù
ÙØ Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù ÛÚ© Ø³ÙØ§Ù "Ø¹Ø¬ÛØ¨" Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯ دبارÙâÛ Ø§ÛÙÚ©Ù Ù
ÛâØ®ÙØ§Ùد ترک Ú©ÙØ¯ ÛØ§ ÙÙ.</p>
<p>Ø§ØØªÙ
Ø§ÙØ§ Ø¢ÙâÙØ§ پاسخ Ù
ÛâØ¯ÙØ¯ "ÙÙ" Ù ØÙاظت Ø¢âÛâÙØ±ÛÙ
ÙÚ© Ù
ÛâØ´ÙØ¯.</p>
<button onclick="attack()">ÛÚ© Ø¢ÛâÙØ±ÛÙ
"ØÙØ§Ø¸ØªâØ´Ø¯Ù" اضاÙÙ Ú©ÙÛØ¯.</button>
</body>
</html>Sandbox attribute
ÛÚ©Û Ø§Ø² ÚÛØ²ÙاÛÛ Ú©Ù ØªÙØ³Ø· sandbox attribute Ù
ØØ¯Ùد Ù
ÛâØ´ÙØ¯ navigation است. ÛÚ© sandboxed iframe Ù
Ù
ک٠است top.location را تغÛÛØ± ÙØ¯Ùد.
پس Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
iframe را با sandbox="allow-scripts allow-forms" اضاÙÙ Ú©ÙÛÙ
. اÛ٠اÙ
ر Ù
ØØ¯ÙØ¯ÛØªâÙØ§ را Ú©Ø§ÙØ´ Ù
ÛâØ¯ÙØ¯ ٠اسکرÛپتâÙØ§ Ù ÙØ±Ù
âÙØ§ را Ù
جاز Ù
ÛâÚ©ÙØ¯. اÙ
ا Ù
ا allow-top-navigation را ØØ°Ù Ù
Û Ú©ÙÛÙ
تا تغÛÛØ± top.location Ù
Ù
ÙÙØ¹ باشد.
کد اÛÙØ¬Ø§Ø³Øª:
<iframe sandbox="allow-scripts allow-forms" src="facebook.html"></iframe>
راÙâÙØ§Û دÛÚ¯Ø±Û ÙÛØ² Ø¨Ø±Ø§Û Ø¯ÙØ± زد٠اÛÙ ØÙاظت Ø³Ø§Ø¯Ù ÙØ¬Ùد دارد.
X-Frame-Options
ÙØ¯Ø± سÙ
ت Ø³Ø±ÙØ± X-Frame-Options Ù
ÛâØªÙØ§Ùد ÙÙ
Ø§ÛØ´ ØµÙØÙ Ø±Ø§ در ÛÚ© ÙØ±ÛÙ
Ù
جاز ÛØ§ Ù
Ù
ÙÙØ¹ Ú©ÙØ¯.
اÛÙ Ø¨Ø§ÛØ¯ دÙÛÙØ§ ب٠عÙÙØ§Ù HTTP-header ÙØ±Ø³ØªØ§Ø¯Ù Ø´ÙØ¯: اگر Ù
Ø±ÙØ±Ú¯Ø± آ٠را در HTML <meta> tag Ù¾ÛØ¯Ø§ Ú©ÙØ¯Ø آ٠را ÙØ§Ø¯Ûد٠Ù
ÛâÚ¯ÛØ±Ø¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ <meta http-equiv="X-Frame-Options"...> ÙÛÚ Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù
ÙØ®ÙØ§ÙØ¯ داد.
ÙØ¯Ø± Ù ÛâÙÙØ§Ùد 3 Ù ÙØ¯Ø§Ø± داشت٠باشد:
DENY- ÙÛÚâÚ¯Ø§Ù ØµÙØÙ Ø±Ø§ درÙÙ ÛÚ© ÙØ±ÛÙ ÙØ´Ø§Ù ÙØ¯ÙÛØ¯.
SAMEORIGIN- اگر parent document از Ù ÙØ¨Ø¹ ÛÚ©Ø³Ø§Ù Ø¨ÛØ§ÛØ¯Ø Ø¯Ø±ÙÙ ÛÚ© ÙØ±Û٠را ٠جاز Ù ÛâÚ©ÙØ¯.
ALLOW-FROM domain- گر parent document از دا٠ÙÙâÛ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø¨Ø§Ø´Ø¯Ø Ø¯Ø±ÙÙ ÛÚ© ÙØ±Û٠را ٠جاز Ù ÛâÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Twitter از X-Frame-Options: SAMEORIGIN Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯.
ÙØªÛج٠اÛÙØ¬Ø§Ø³Øª:
<iframe src="https://twitter.com"></iframe>
بست٠ب٠Ù
Ø±ÙØ±Ú¯Ø±ØªØ§ÙØ iframe Ø¨Ø§ÙØ§ ÛØ§ خاÙÛ Ø§Ø³Øª ÛØ§ ب٠شÙ
ا ÙØ´Ø¯Ø§Ø± Ù
ÛâØ¯ÙØ¯ Ú©Ù Ù
Ø±ÙØ±Ú¯Ø± اجاز٠ÙÙ
ÛâØ¯ÙØ¯ Ø¢Ù ØµÙØÙ Ø¨Ù Ø§ÛÙ Ø±ÙØ´ Ù¾ÛÙ
Ø§ÛØ´ Ú©ÙØ¯.
ÙÙ Ø§ÛØ´ با ع٠Ùکرد ØºÛØ±ÙعاÙ
ÙØ¯Ø± X-Frame-Options ÛÚ© عارضÙâÛ Ø¬Ø§ÙØ¨Û دارد. بÙÛÙâÛ Ø³Ø§ÛØªâÙØ§ ÙØ§Ø¯Ø± ÙØ®ÙاÙÙØ¯ Ø¨ÙØ¯ Ú©Ù ØµÙØÙâÛ Ù
ا را در ÛÚ© ÙØ±ÛÙ
ÙÙ
Ø§ÛØ´ دÙÙØ¯Ø ØØªÛ اگر Ø¯ÙØ§ÛÙ Ø®ÙØ¨Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯ Ú©Ù Ø§ÙØ¬Ø§Ù
دÙÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ راÙâØÙâÙØ§Û دÛÚ¯Ø±Û ÙØ¬Ùد Ø¯Ø§Ø±Ø¯â¦ Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© ØµÙØÙ Ø±Ø§ با ÛÚ© <div> با استاÛÙâÙØ§Û height: 100%; width: 100%; âÙ¾ÙØ´Ø´â دÙÛÙ
Ø Ø¯Ø± ÙØªÛج٠تÙ
اÙ
Ú©ÙÛÚ©âÙØ§ را ÙØ·Ø¹ Ù
ÛâÚ©ÙØ¯. اگر window == top ÛØ§ Ù
ØªÙØ¬Ù Ø´ÙÛÙ
ک٠ب٠ØÙاظت ÙÛØ§Ø²Û ÙØ¯Ø§Ø±ÛÙ
Ø <div> Ø¨Ø§ÛØ¯ ØØ°Ù Ø´ÙØ¯.
ÚÛØ²Û شبÛ٠ب٠اÛÙ:
<style>
#protector {
height: 100%;
width: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 99999999;
}
</style>
<div id="protector">
<a href="/" target="_blank">Go to the site</a>
</div>
<script>
// اگر Ù¾ÙØ¬Ø±ÙâÛ Ø¨Ø§ÙØ§ÛÛ Ø§Ø² Ù
ÙØ¨Ø¹ Ù
ØªÙØ§ÙØªÛ Ø¨Ø§Ø´Ø¯Ø Ø®Ø·Ø§ Ø®ÙØ§ÙÛÙ
داشت
// اÙ
ا اÛÙØ¬Ø§ اÙÚ©Û Ø§Ø³Øª
if (top.document.domain == document.domain) {
protector.remove();
}
</script>
ÙØ³Ø®ÙâÛ Ù¾ÛØ´âÙÙ Ø§ÛØ´:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<style>
#protector {
height: 100%;
width: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 99999999;
}
</style>
</head>
<body>
<div id="protector">
<a href="/" target="_blank">Ø¨Ù Ø³Ø§ÛØª برÙÛØ¯.</a>
</div>
<script>
if (top.document.domain == document.domain) {
protector.remove();
}
</script>
.اÛÙ Ù
ت٠ÙÙ
ÛØ´Ù ÙØ§Ø¨Ù Ø¯ÛØ¯Ù است
.رÙÛ Ø¢Ù Ø§Ø² ÙØ± ÙØ¹Ø§ÙÛØªÛ جÙÙÚ¯ÛØ±Û Ù
Ûâکرد div از ÛÚ© داÙ
ÙÙâÛ Ø¯Ûگر باز Ø¨ÙØ¯ document اÙ
ا اگر ØµÙØÙ Ø¯Ø±ÙÙ ÛÚ©
<button onclick="alert(1)">در Ø¢Ù ØµÙØ±Øª Ú©ÙÛÚ© کار ÙÙ
Ûâکرد.</button>
</body>
</html><!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<iframe src="iframe.html"></iframe>
</body>
</html>Samesite cookie attribute
Ø¨Ø±Ø§Û Ø¬ÙÙÚ¯ÛØ±Û از ØÙ
ÙÙâÙØ§Û clickjackingØ Ù
ÛâØªÙØ§Ù از samesite cookie attribute ÙÛØ² Ø§Ø³ØªÙØ§Ø¯Ù کرد.
ÛÚ© Ú©ÙÚ©Û Ø¨Ø§ اÛÙ attribute ÙÙØ· اگر Ø¨Ù ØµÙØ±Øª ٠ستÙÛ٠باز Ø´Ø¯Ù Ø¨Ø§Ø´Ø¯Ø Ù٠از طرÛÙ ÛÚ© ÙØ±ÛÙ Ø ÛØ§ ÙØ± ÚÛØ² دÛÚ¯Ø±ÛØ Ø¨Ø±Ø§Û ÛÚ© ÙØ¨Ø³Ø§Ûت ÙØ±Ø³ØªØ§Ø¯Ù Ù ÛâØ´ÙØ¯. Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¨ÛØ´ØªØ± در بخش Cookies, document.cookie.
اگر Ø³Ø§ÛØªØ Ù
ث٠FacebookØ Ø±ÙÛ authentication cookie Ø®ÙØ¯ samesite attribute را Ø¯Ø§Ø´ØªØ Ù
ث٠اÛÙ:
Set-Cookie: authorization=secret; samesite
â¦Ø¢Ùگا٠ÙÙ ÚÛÙ Ú©ÙÚ©Û ÙÙØªÛ Facebook در iframe از ÛÚ© Ø³Ø§ÛØª دÛگر باز Ù ÛâØ´ÙØ¯Ø ÙØ±Ø³ØªØ§Ø¯Ù ÙÙ ÛâØ´ÙØ¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ØÙ Ù٠شکست Ù ÛâØ®ÙØ±Ø¯.
ÙÙØªÛ Ú©ÙÚ©ÛâÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù ÙÙ
ÛâØ´ÙÙØ¯Ø samesite cookie attribute ØªØ§Ø«ÛØ±Û ÙØ®ÙØ§ÙØ¯ داشت. اÛÙ Ù
ÛâØªÙØ§Ùد بع ÙØ¨Ø³Ø§ÛتâÙØ§ Ø§Ø¬Ø§Ø²Ù Ø¯ÙØ¯ Ú©Ù Ø¨Ù Ø³Ø§Ø¯Ú¯Û ØµÙØØ§Øª عÙ
ÙÙ
Û Ù Ø§ØØ±Ø§Ø² ÙÙÛØª ÙØ´Ø¯ÙâÛ Ù
ا را در iframeÙØ§ ÙÙ
Ø§ÛØ´ دÙÙØ¯.
با اÛÙ ØØ§ÙØ Ø§Û٠٠٠ک٠است ب٠ØÙ ÙØ§Øª clickjacking در ÚÙØ¯ Ù ÙØ±Ø¯ Ù ØØ¯Ùد ÙÛØ² Ø§Ø¬Ø§Ø²Ù Ø¯ÙØ¯. Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ ÛÚ© ÙØ¨Ø³Ø§Ûت ÙØ¸Ø±Ø³ÙØ¬Û ÙØ§Ø´Ùاس ک٠با Ø¨Ø±Ø±Ø³Û Ø¢Ø¯Ø±Ø³âÙØ§Û IP از راÛâÚ¯ÛØ±Û ØªÚ©Ø±Ø§Ø±Û Ø¬ÙÙÚ¯ÛØ±Û Ù ÛâÚ©ÙØ¯Ø ÙÙ ÚÙØ§Ù در برابر clickjacking Ø¢Ø³ÛØ¨âÙ¾Ø°ÛØ± است Ø²ÛØ±Ø§ کاربرا٠را با Ø§Ø³ØªÙØ§Ø¯Ù از Ú©ÙÚ©ÛâÙØ§ Ø§ØØ±Ø§Ø² ÙÙÛØª ÙÙ ÛâÚ©ÙØ¯.
Ø®ÙØ§ØµÙ
ÛÚ© Ø±Ø§Ù Ø¨Ø±Ø§Û âÙØ±Ûب دادÙâ کاربرا٠ک٠رÙÛ Ø³Ø§ÛØª ÙØ±Ø¨Ø§ÙÛ Ú©ÙÛÚ© Ú©ÙÙØ¯ بدÙ٠اÛÙÚ©Ù ØØªÛ بداÙÙØ¯ ÚÙ Ø§ØªÙØ§ÙÛ Ù ÛâØ§ÙØªØ¯Ø Clickjacking است. اگر Ø§ÙØ¯Ø§Ù ات Ù ÙÙ ÙØ¹Ø§Ù شد٠با Ú©ÙÛÚ© ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø§ÛÙ Ø®Ø·Ø±ÙØ§Ú© است.
ÛÚ© Ùکر Ù ÛâØªÙØ§Ùد ÙÛÙÚ©Û Ø¨Ù ØµÙØÙâÛ Ø´ÛØ·Ø§ÙÛ Ø®ÙØ¯ در ÛÚ© Ù¾ÛØ§Ù Ø§Ø±Ø³Ø§Ù Ú©ÙØ¯ ÛØ§ Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ú¯Ø§Ù را با Ø±ÙØ´âÙØ§Û دÛگر Ø¨Ù ØµÙØÙâÛ Ø®ÙØ¯ جذب Ú©ÙØ¯. تÙÙØ¹ Ø²ÛØ§Ø¯Û ÙØ¬Ùد دارد.
از ÛÚ© Ù ÙØ¸Ø± â ØÙ ÙÙ âØ¹Ù ÛÙâ ÙÛØ³Øª: ØªÙ Ø§Ù Ú©Ø§Ø±Û Ú©Ù ÛÚ© Ùکر Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙØ¯ رÙÚ¯ÛØ±Û ÛÚ© Ú©ÙÛÚ© است. ا٠ا از Ù ÙØ¸Ø±Û دÛÚ¯Ø±Ø Ø§Ú¯Ø± Ùکر Ø¨Ø¯Ø§ÙØ¯ ک٠پس از Ú©ÙÛÚ©Ø Ú©ÙØªØ±Ù دÛÚ¯Ø±Û Ø¸Ø§ÙØ± Ù ÛâØ´ÙØ¯Ø ٠٠ک٠است از Ù¾ÛØ§Ù âÙØ§Û ØÛÙÙâØ¢Ù ÛØ² Ø¨Ø±Ø§Û ÙØ§Ø¯Ø§Ø± کرد٠کاربر ب٠کÙÛÚ© کرد٠رÙÛ Ø¢ÙâÙØ§ ÙÛØ² Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙØ¯.
ØÙ ÙÙ Ø¨Ø³ÛØ§Ø± Ø®Ø·Ø±ÙØ§Ú© Ø§Ø³ØªØ Ø²ÛØ±Ø§ ز٠اÙÛ Ú©Ù Ù Ø§ رابط Ú©Ø§Ø±Ø¨Ø±Û Ø±Ø§ Ù ÙÙØ¯Ø³Û Ù ÛâÚ©ÙÛÙ Ø Ù Ø¹Ù ÙÙØ§Ù Ù¾ÛØ´âبÛÙÛ ÙÙ ÛâÚ©ÙÛÙ Ú©Ù ÛÚ© Ùکر از Ø·Ø±Ù Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù Ú©ÙÛÚ© Ú©ÙØ¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø¢Ø³ÛØ¨âÙ¾Ø°ÛØ±ÛâÙØ§ را Ù ÛâØªÙØ§Ù در ٠کاÙâÙØ§Û Ú©Ø§Ù ÙØ§Ù ØºÛØ±Ù ÙØªØ¸Ø±Ù ÛØ§Ùت.
- ØªÙØµÛÙ Ù
ÛâØ´ÙØ¯ از
X-Frame-Options: SAMEORIGINدر ØµÙØØ§Øª (ÛØ§ Ú©Ù ÙØ¨âØ³Ø§ÛØªâÙØ§) Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯ Ú©Ù ÙØ±Ø§Ø± ÙÛØ³Øª در Ø¯Ø§Ø®Ù ÙØ±ÛÙ âÙØ§ Ù Ø´Ø§ÙØ¯Ù Ø´ÙÙØ¯. - اگر Ù
ÛâØ®ÙØ§ÙÛÙ
اجاز٠دÙÛÙ
ØµÙØØ§ØªÙ
ا٠در iframe ÙØ´Ø§Ù داد٠شÙÙØ¯Ø اÙ
ا ÙÙ
ÚÙØ§Ù اÛÙ
٠بÙ
اÙÛÙ
Ø Ø§Ø² Ù¾ÙØ´Ø´
<div>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ .
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)