Привет.
Интересно узнать следующее:
Если передашь на сайт код JS который потом выполнится у других пользователей - это XSS.
А если передашь на сайт код JS который потом выполнится только у тебя же - это XSS? Или какое то другое название? (возвращается например в информационном сообщении пользователю на введенные им данные)
И еще вопросик. В windows знаю, что нельзя, а в Linux можно в имени файла
передать скрипт или нет?
Спасибо.
XSS это вобще то кросс-сайт-скриптинг.
То есть суть его не в том, что выполняется скрипт на клиенте на сайте, который не должен выполняться, а в том что он передает на другой сайт конфиденциальную инфу (куки в большинстве сл) которая иначе на него бы так никогда не попала.
Но вобще под XSS привыкли понимать и то что ты и написал... И в этом смысле, да неважно, у кого оно выполняется, только у того кто отправил скрипт или у всех.
Второй вопрос ага, перефразируй
Linux, Apache, PHP, MySQL, Javascript, CSS, XHTML
http://vkontakte.ru/id7182971
Если я загружаю файлы на сервер и оставляю им их имя, а
потом где-то мне надо выводить на странице имя этого файла (например уже для скачки).
Надо волноваться о XSS? Или никак не выйдет создать файл с "таким" именем ?
например файлик
<script type="text/javascript">alert(111)</script> . txt
Насчет первого ясно, просто интересно было следующее: если взломщик мучается вставляет во входные данные скрипт, а он сработает только у него же, и нигде в базу не запомнится, то может оставить возможность - пусть мучается на удовольствие, хотя есть минус - все равно юзеры расценят это как провтык программиста (если им кто-то покажет).
Последний раз редактировалось xyzvital; 12.11.2009 в 06:29.
сохранять файлы с настоящим именем в файловой системе неправильно в принципе. самые очевидные проблемы:
- будет сложно разрулить ситуацию когда будут заливать разные файлы с одинаковым именем "img0001.jpg" ?
- надо будет дополнительно защищаться от даблдотов, например для имени файла "../images/logo.jpg" который может перетереть логотип твоего сайта при структуре:
wwwroot
--images # для картинок сайта
--upload # для картинок, загружаемых юзерами
поэтому считаем "оставляю им их имя" в контексте отображения этого имени на странице. к примеры через таблицу соответствия назначенное имя фала - загруженное имя файла.
в этом случае твой вариант вполне рабочий - ты сможешь загрузить файл на сервер с таким именем, и показать это имя для пользователей. это не зависит от операционной системы.
для защиты от ксс в этом случае надо испольовать пхп функции htmlspecialchars или htmlentities, которые преобразируют служебные хтмл символы в соответствующие хтмл &-коды. тобто пользователь увидит именно то имя файла которое он ввел, независимо от наличия, или отсутвствия там хтмл тэгов.
[/QUOTE]вставляет во входные данные скрипт, а он сработает только у него же[/QUOTE] если скрипт (жаваскрипт, если я правильно понял) выполняется на странице, то он выполняется на этой странице для всех кто эту страницу открыл, и не запретил выполнение жабаскриптов в настройках браузера.
понять вопрос очень сложно. расскажи лучше на примере, допуская что взломщик уже отмучался и успешно вставил во входные данные скрипт, почему этот скрипт будет выполняться только для него, и не выполняться для остальных.
1. все это понятно, спасибо, Я просто с linux не работал , вот и интересно можно в нем файл с таким именем создать или нет (в windows нельзя).
2. Надуманная последовательность для примера:
а) Пользователь заполняет форму:
имя:<script type="text/javascript">alert(111)</script> Вася пупкин
пароль: ******
б) сабмит
в) php скрипт
принимает $_POST['name'] .
поиск по базе - такого пользователя нет
г) формируем сообщение на выдачу (возможность дыры)
echo 'пользователь' . $_POST['name'] . 'не существует';
Так вот сколько ерунды ни вводи это сообщение будет приходить
только тому кто его ввел - атаки на других пользователей нет в принципе.
Ввел скрипт с document.body.innerHTML = '';
вот и сиди наслаждайся картинкой...
пример хороший. дествительно никто этой страницы кроме засабмитевшего не увидит.
а вот вопрос - разрешать для таких страниц ксс или нет - плохой.
о секьюрности лучше думать всегда.
зачем специально оставлять дырки?
и так всего не предусмотришь, и обязательно гдето налажаешь, а если еще и специально оставлять "безопасные" дырки - еще хуже будет.
имхо, ничего сложного.
стандартных "дорожки" всего 3 - гет, пост, и куки.
отдельно, если используются в проекте - рсс, курл и т.п.
всему остальному можно более/мение доверять, но без фанатизма.
иногда встречаю вот такие снипеты
PHP код:
$ws = 19;
if(!isset($ws) || (int)$ws != 19) alarm(); // а вдруг!
Как это только три.
А из базы данных, из файлов. Там по определению могут лежать любые данные. Фильтровать на вводе или отображать данные в базу с помощью htmlspecialchars() говорят верх некорректности, а обрабатывать так только при выдаче.
Вот и получается, что по какому то редкому условию может потребоваться загрузить данные из базы, а то что их фильтрануть надо забывается (по новой системе уже надеюсь нет).
да действительно, а вдруг кто-то украдет $wsPHP код:
$ws = 19;
if(!isset($ws) || (int)$ws != 19) alarm(); // а вдруг!