ÐÑака ÑÐ¸Ð¿Ñ â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>
<!-- URL-адÑеÑа з ÑайÑÑ-жеÑÑви -->
<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>
<!-- URL-адÑеÑа з ÑайÑÑ-жеÑÑви -->
<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>
<!-- URL-адÑеÑа з ÑайÑÑ-жеÑÑви -->
<iframe src="facebook.html"></iframe>
<button>ÐаÑиÑнÑÑÑ ÑÑÑ!</button>
<div>...Ð Ñи кÑÑÑий (наÑпÑÐ°Ð²Ð´Ñ Ñ ÐºÑÑÑий Ñ
акеÑ)!</div>
</body>
</html>ÐÑе, Ñо нам поÑÑÑбно Ð´Ð»Ñ Ð°Ñаки â Ñе ÑозÑаÑÑваÑи <iframe> на ÑкÑдливÑй ÑÑоÑÑнÑÑ Ñаким Ñином, Ñоб кнопка знаÑ
одилаÑÑ Ð¿ÑÑмо над поÑиланнÑм. Таким Ñином, коли коÑиÑÑÑÐ²Ð°Ñ Ð½Ð°ÑиÑÐºÐ°Ñ Ð¿Ð¾ÑиланнÑ, вÑн ÑакÑиÑно наÑиÑÐºÐ°Ñ ÐºÐ½Ð¾Ð¿ÐºÑ. ÐазвиÑай Ñе можна зÑобиÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ CSS.
ÐÑака Ð²Ð¿Ð»Ð¸Ð²Ð°Ñ Ð»Ð¸Ñе на дÑÑ Ð¼Ð¸ÑÑ (або подÑбнÑ, Ñк-Ð¾Ñ Ð½Ð°ÑиÑÐºÐ°Ð½Ð½Ñ Ð½Ð° мобÑлÑÐ½Ð¾Ð¼Ñ Ð¿ÑиÑÑÑоÑ).
ÐÐ²ÐµÐ´ÐµÐ½Ð½Ñ Ð· клавÑаÑÑÑи дÑже важко пеÑеÑпÑÑмÑваÑи. Ð¢ÐµÑ Ð½ÑÑно, ÑкÑо Ñ Ð½Ð°Ñ Ñ ÑекÑÑове поле Ð´Ð»Ñ Ð·Ð»Ð°Ð¼Ñ, ми можемо ÑозÑаÑÑваÑи iframe Ñаким Ñином, Ñоб ÑекÑÑÐ¾Ð²Ñ Ð¿Ð¾Ð»Ñ Ð¿ÐµÑекÑивали одне одного. ТомÑ, коли вÑдвÑдÑÐ²Ð°Ñ Ð½Ð°Ð¼Ð°Ð³Ð°ÑÑÑÑÑ ÑÑокоÑÑваÑиÑÑ Ð½Ð° ÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ Ð¿Ð¾Ð»Ñ, Ñке вÑн баÑиÑÑ Ð½Ð° ÑÑоÑÑнÑÑ, вÑн ÑакÑиÑно ÑокÑÑÑÑÑÑÑÑ Ð½Ð° Ð¿Ð¾Ð»Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ iframe.
Ðле ÑÐ¾Ð´Ñ Ð²Ð¸Ð½Ð¸ÐºÐ°Ñ Ð¿Ñоблема. УÑе, Ñо введе вÑдвÑдÑваÑ, бÑде пÑÐ¸Ñ Ð¾Ð²Ð°Ð½Ð¾, оÑкÑлÑки iframe не видно.
ÐÑди зазвиÑай пÑипинÑÑÑÑ Ð²Ð²Ð¾Ð´Ð¸Ñи ÑекÑÑ, коли не баÑаÑÑ, Ñк на екÑÐ°Ð½Ñ Ð´ÑÑкÑÑÑÑÑÑ Ð½Ð¾Ð²Ñ Ñимволи.
ÐÑиклади Ñлабкого Ð·Ð°Ñ Ð¸ÑÑÑ
ÐайÑÑаÑÑÑий ÑпоÑÑб Ð·Ð°Ñ Ð¸ÑÑÑ â Ñе код JavaScript, Ñкий забоÑонÑÑ Ð²ÑдкÑиваÑи ÑÑоÑÑÐ½ÐºÑ Ñ ÑÑÐµÐ¹Ð¼Ñ (Ñак званий âframebustingâ).
Це виглÑÐ´Ð°Ñ Ñак:
if (top != window) {
top.location = window.location;
}
ТобÑо: ÑкÑо вÑкно дÑзнаÑÑÑÑÑ, Ñо воно не звеÑÑ Ñ, Ñо воно авÑомаÑиÑно ÑÑÐ°Ñ Ð²ÐµÑÑ Ð½Ñм.
Це не надÑйнÑÑий заÑÑб Ð·Ð°Ñ Ð¸ÑÑÑ, ÑÐ¾Ð¼Ñ Ñо Ñ Ð±Ð°Ð³Ð°Ñо ÑпоÑобÑв зламаÑи його. ÐавайÑе ÑозглÑнемо декÑлÑка.
ÐлокÑÐ²Ð°Ð½Ð½Ñ top-навÑгаÑÑÑ
Ðи можемо заблокÑваÑи пеÑеÑ
Ñд, викликаний змÑÐ½Ð¾Ñ top.location в обÑÐ¾Ð±Ð½Ð¸ÐºÑ Ð¿Ð¾Ð´ÑÑ beforeunload.
ÐовнÑÑÐ½Ñ ÑÑоÑÑнка (Ñо належиÑÑ Ñ Ð°ÐºÐµÑÑ) вÑÑановлÑÑ Ð¾Ð±Ñобник подÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð±ÑганнÑ, напÑиклад:
window.onbeforeunload = function() {
return false;
};
Ðоли iframe намагаÑÑÑÑÑ Ð·Ð¼ÑниÑи top.location, вÑдвÑдÑÐ²Ð°Ñ Ð¾ÑÑимÑÑ Ð¿Ð¾Ð²ÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñз запиÑом, Ñи Ñ
оÑе вÑн пÑÑи.
У бÑлÑÑоÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв вÑдвÑдÑÐ²Ð°Ñ Ð²ÑдповÑÑÑÑ Ð½ÐµÐ³Ð°Ñивно, ÑÐ¾Ð¼Ñ Ñо вÑн не Ð·Ð½Ð°Ñ Ð¿Ñо iframe â вÑе, Ñо вÑн баÑиÑÑ, Ñе веÑÑ
Ð½Ñ ÑÑоÑÑнка, Ð½ÐµÐ¼Ð°Ñ Ð¿ÑиÑин залиÑаÑи ÑÑ. Тож top.location не змÑниÑÑÑÑ!
РдÑÑ:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div>ÐмÑнÑÑ top.location на javascript.info</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>ÐмовÑÑно, вÑн вÑдповÑв би "нÑ", а заÑ
иÑÑ iframe зламано.</p>
<button onclick="attack()">ÐодайÑе "заÑ
иÑений" iframe</button>
</body>
</html>ÐÑÑибÑÑ sandbox
ÐднÑÑÑ Ð· ÑеÑей, ÑÐºÑ Ð¼Ð¾Ð¶Ð½Ð° обмежиÑи аÑÑибÑÑом sandbox Ñ Ð½Ð°Ð²ÑгаÑÑÑ. ÐзолÑований 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-заголовок: бÑаÑÐ·ÐµÑ Ð¿ÑоÑгноÑÑÑ Ð¹Ð¾Ð³Ð¾, ÑкÑо знайде в HTML <meta> ÑегÑ. ÐÑже, <meta http-equiv="X-Frame-Options"...> нÑÑого не даÑÑÑ.
Ðаголовок може маÑи 3 знаÑеннÑ:
DENY- ÐÑколи не показÑваÑи ÑÑоÑÑÐ½ÐºÑ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑеймÑ.
SAMEORIGIN- ÐозволиÑи показ вÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑеймÑ, ÑкÑо баÑÑкÑвÑÑкий докÑÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñ Ð¾Ð´Ð¸ÑÑ Ñз Ñого Ñамого джеÑела.
ALLOW-FROM domain- ÐозволиÑи показ вÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑеймÑ, ÑкÑо баÑÑкÑвÑÑкий докÑÐ¼ÐµÐ½Ñ Ñз заданого доменÑ.
ÐапÑиклад, Twitter викоÑиÑÑовÑÑ X-Frame-Options: SAMEORIGIN.
ÐÑÑ ÑезÑлÑÑаÑ:
<iframe src="https://twitter.com"></iframe>
Ðалежно вÑд ваÑого бÑаÑзеÑа, iframe виÑе або поÑожнÑй, або попеÑÐµÐ´Ð¶Ð°Ñ Ð²Ð°Ñ Ð¿Ñо Ñе, Ñо бÑаÑÐ·ÐµÑ Ð½Ðµ дозволÑÑ Ð²ÑдобÑазиÑи ÑÑ ÑÑоÑÑнкÑ.
ÐÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð· Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾Ñ ÑÑнкÑÑоналÑнÑÑÑÑ
Ðаголовок X-Frame-Options Ð¼Ð°Ñ Ð¿Ð¾Ð±ÑÑний еÑекÑ. ÐнÑÑ ÑайÑи не зможÑÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñи наÑÑ ÑÑоÑÑÐ½ÐºÑ Ñ ÑÑеймÑ, навÑÑÑ ÑкÑо Ñ Ð½Ð¸Ñ
Ñ Ð´Ð»Ñ ÑÑого Ð²Ð°Ð³Ð¾Ð¼Ñ Ð¿ÑиÑини.
Ð¢Ð¾Ð¼Ñ Ñ ÑнÑÑ ÑÑÑеннÑâ¦ÐапÑиклад, ми можемо âпокÑиÑиâ ÑÑоÑÑÐ½ÐºÑ <div> Ð·Ñ ÑÑилÑми height: 100%; width: 100%;, Ñоб вÑн пеÑеÑ
оплÑвав ÑÑÑ ÐºÐ»Ð°ÑаннÑ. Цей <div> можна видалиÑи, ÑкÑо window == top або ÑкÑо ми зÑозÑмÑли, Ñо заÑ
иÑÑ Ð½Ð°Ð¼ не поÑÑÑбен.
ЩоÑÑ Ð½Ð° зÑазок ÑÑого:
<style>
#protector {
height: 100%;
width: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 99999999;
}
</style>
<div id="protector">
<a href="/" target="_blank">ÐеÑейÑи на ÑайÑ</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 над Ð½ÐµÑ Ð·Ð°Ð²Ð°Ð´Ð¸ÑÑ Ð±ÑдÑ-Ñким дÑÑм.
<button onclick="alert(1)">ÐлÑк Ñ Ð´Ð°Ð½Ð¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð½Ðµ ÑпÑаÑÑÑ</button>
</body>
</html><!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<iframe src="iframe.html"></iframe>
</body>
</html>ÐÑÑибÑÑ cookie: samesite
ÐÑÑибÑÑ cookie samesite Ñакож може запобÑгÑи clickjacking аÑакам.
Файл cookie з Ñаким аÑÑибÑÑом надÑилаÑÑÑÑÑ Ð½Ð° веб-ÑайÑ, лиÑе ÑкÑо його вÑдкÑиÑо безпоÑеÑеднÑо, а не ÑеÑез ÑÑейм Ñи ÑнÑим Ñином. ÐÑлÑÑе ÑнÑоÑмаÑÑÑ Ð² ÑоздÑÐ»Ñ Ð¤Ð°Ð¹Ð»Ð¸ cookies, document.cookie.
Якби ÑайÑ, напÑиклад Facebook, пÑи аÑÑенÑиÑÑкаÑÑÑ Ð¼Ð°Ð² аÑÑибÑÑ samesite Ñ ÑÐ°Ð¹Ð»Ñ cookie, оÑÑ Ñак:
Set-Cookie: authorization=secret; samesite
â¦Ð¢Ð¾Ð´Ñ Ñакий Ñайл cookie не надÑилаÑимеÑÑÑÑ, коли Facebook бÑде вÑдкÑиÑо в iframe з ÑнÑого ÑайÑÑ. Тож аÑака не вдаÑÑÑÑÑ.
ÐÑÑибÑÑ cookie samesite не маÑиме еÑекÑÑ, ÑкÑо Ñайли cookies не викоÑиÑÑовÑÑÑÑÑÑ. Це може дозволиÑи ÑнÑим веб-ÑайÑам легко показÑваÑи наÑÑ Ð·Ð°Ð³Ð°Ð»ÑнодоÑÑÑпнÑ, неавÑенÑиÑÑÐºÐ¾Ð²Ð°Ð½Ñ ÑÑоÑÑнки в iframes.
Ðднак Ñе Ñакож може дозволÑÑи аÑакам за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ clickjacking пÑаÑÑваÑи в кÑлÑÐºÐ¾Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ°Ñ . ÐапÑиклад, веб-ÑÐ°Ð¹Ñ Ð°Ð½Ð¾Ð½Ñмного опиÑÑваннÑ, Ñкий запобÑÐ³Ð°Ñ Ð´ÑблÑÐ²Ð°Ð½Ð½Ñ Ð³Ð¾Ð»Ð¾ÑÑÐ²Ð°Ð½Ð½Ñ ÑлÑÑ Ð¾Ð¼ пеÑевÑÑки IP-адÑеÑи, вÑе одно бÑде вÑазливим до clickjacking аÑаки, оÑкÑлÑки вÑн не авÑенÑиÑÑкÑÑ ÐºÐ¾ÑиÑÑÑваÑÑв за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑайлÑв cookie.
ÐÑдÑÑмки
Clickjacking â Ñе ÑпоÑÑб âобдÑÑиÑиâ коÑиÑÑÑваÑÑв, Ñоб вони наÑиÑнÑли на ÑайÑ-жеÑÑвÑ, навÑÑÑ Ð½Ðµ знаÑÑи, Ñо вÑдбÑваÑÑÑÑÑ. Це небезпеÑно, ÑкÑо Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ñ Ð´ÑÑ, ÑÐºÑ Ð°ÐºÑивÑÑÑÑÑÑ ÐºÐ»Ñком.
Ð¥Ð°ÐºÐµÑ Ð¼Ð¾Ð¶Ðµ ÑозмÑÑÑиÑи в повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ÑÐ²Ð¾Ñ ÑкÑÐ´Ð»Ð¸Ð²Ñ ÑÑоÑÑÐ½ÐºÑ Ð°Ð±Ð¾ заманиÑи вÑдвÑдÑваÑÑв ÑкимоÑÑ ÑнÑим ÑпоÑобом. ÐÑнÑÑ Ð±Ð°Ð³Ð°Ñо ваÑÑаÑÑй.
РоднÑÑÑ ÑоÑки зоÑÑ â аÑака âне глибокаâ: вÑе, Ñо ÑобиÑÑ Ñ Ð°ÐºÐµÑ, Ñе пеÑÐµÑ Ð¾Ð¿Ð»ÑÑ Ð¾Ð´Ð¸Ð½ клÑк. Ðле з ÑнÑÐ¾Ñ â ÑкÑо Ñ Ð°ÐºÐµÑ Ð·Ð½Ð°Ñ, Ñо пÑÑÐ»Ñ Ð½Ð°ÑиÑÐºÐ°Ð½Ð½Ñ Ð·âÑвиÑÑÑÑ ÑнÑий ÐµÐ»ÐµÐ¼ÐµÐ½Ñ ÐºÐµÑÑваннÑ, вÑн може викоÑиÑÑовÑваÑи Ñ Ð¸ÑÑÑ Ð¿Ð¾Ð²ÑдомленнÑ, Ñоб змÑÑиÑи коÑиÑÑÑваÑа наÑиÑнÑÑи на Ð½Ð¸Ñ .
ÐÑака доÑиÑÑ Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑна, ÑÐ¾Ð¼Ñ Ñо коли ми ÑозÑоблÑÑмо ÑнÑеÑÑÐµÐ¹Ñ ÐºÐ¾ÑиÑÑÑваÑа, ми зазвиÑай не оÑÑкÑÑмо, Ñо Ñ Ð°ÐºÐµÑ Ð¼Ð¾Ð¶Ðµ клаÑнÑÑи вÑд ÑÐ¼ÐµÐ½Ñ Ð²ÑдвÑдÑваÑа. Ð¢Ð¾Ð¼Ñ Ð²ÑазливÑÑÑÑ Ð¼Ð¾Ð¶Ð½Ð° знайÑи в абÑолÑÑно неÑподÑÐ²Ð°Ð½Ð¸Ñ Ð¼ÑÑÑÑÑ .
- РекомендÑÑÑÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи
X-Frame-Options: SAMEORIGINна ÑÑоÑÑÐ½ÐºÐ°Ñ (або веб-ÑайÑÐ°Ñ Ð·Ð°Ð³Ð°Ð»Ð¾Ð¼), ÑÐºÑ Ð½Ðµ пÑизнаÑÐµÐ½Ñ Ð´Ð»Ñ Ð¿ÐµÑеглÑÐ´Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑеймÑв. - ÐикоÑиÑÑовÑйÑе
<div>пÑикÑиÑÑÑ, ÑкÑо поÑÑÑбно дозволиÑи показ ÑÑоÑÑнок Ñ iframes Ñа залиÑаÑиÑÑ Ð² безпеÑÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)