• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Несколько сложных вопросов Php

  • Автор темы Satell
  • Дата начала
S

Satell

1. Написать php-функцию, определяющую, существует ли введенный посетителем email-адрес в действительности. Критичными являются: время ожидания ответа, достоверность ответа.

2. Написать php-скрипт, который бы выводил собственный код.

3. На сайте с фотогалереей нужно создавать маленькие превьюшки.
Вот код, создающий из JPG-картинки превьюшку размером 100x100 точек:

function create_thumbnail($photo, $thumb){
$im = imagecreatefromjpeg($photo);
$im2 = imagecreate(100, 100);
imagecopyresized(
$im2, $im, 0, 0, 0, 0,
100, 100, imagesx($im), imagesy($im)
);
imagejpeg($im2, $thumb, 80);
}

Однако полевые испытания убеждают нас, что качество получаемой превьюшки довольно низко (можете сами попробовать). Как можно улучшить функцию?
После исправления у нас могли возникнуть проблемы с быстродействием. Какие решения вы можете предложить?

4. Нужно вывести форму в которой пользователь вводит некую кл. фразу и следующий текст: "В кл. фразе Вы можете использовать специальные символы: '*' - заменяет любую комбинацию символов; '?' - заменяет один символ. Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д. на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'." После отправки формы нужно найти и вывести все записи из таблицы с 1 текстовым полем, содержащие кл. фразу по вышеописанному алгоритму.

DHTML

5. Вывести "n" объектов (например картинок), которые бы можно было передвигать по экрану с помощью мышки. Страница при это не должна обновляться. Приветствуется, если это будет работать в браузерах IE c 5.0 и выше, firefox c 1.5 и выше, Opera c 7.5 и выше
6. Предложить вариант DHTML-дерева, работающего в IE5 и выше, Netscape6 и выше, firefox c 1.5 и выше, Opera c 7.5 и выше. Узлы должны раскрываться без обновления окна браузера.


APACHE. Авторизация и безопасность.

7. Скрипту авторизации из формы с полями login и password приходят авторизационные данные. В MySQL в таблице users хранятся числовые id, логины и пароли пользователей. После удачного входа в сессию записывается переменная autorized, истинность которой потом проверяют другие скрипты.

$login = $_REQUEST['login'];
$password = $_REQUEST['password'];
$res = mysql_query('SELECT id FROM users
WHERE login="'.$login.'" AND password="'.$password.'"');
list($user_id) = mysql_fetch_array($res);
session_start();
$_SESSION['authorized'] = isset($user_id);

Есть ли в приведенном скрипте и в самом способе авторизации какие-либо проблемы с безопасностью?

8. Имеется php скрипт, выводящий значения GET переменныx var1, var2 и var3 из строки запроса. Необходимо настроить апач таким образом, чтобы при вводе в строку запроса index-var1-<значение>-var2-<значение>-var3-<значение>.htm, запускался этот скрипт и выводил указанные значения. Изпользовать директивы модуля mod_rewrite и файл .htaccess.
 
M

MajestiC

Ага, ща кто-то за тебя будет выполнять тестовые задания о приеме на работу =)
Давай ты лучше поучишь пхп прежде чем суваться делать сайты за деньги.
 
S

Satell

спасибо, спасибо!
как модифицировать этот скрипт, чтобы он был безопасный?

$login = $_REQUEST['login'];
$password = $_REQUEST['password'];
$res = mysql_query('SELECT id FROM users
WHERE login="'.$login.'" AND password="'.$password.'"');
list($user_id) = mysql_fetch_array($res);
session_start();
$_SESSION['authorized'] = isset($user_id);

Напишите плиз этот скрипт, ато я чето не понимаю:
Нужно вывести форму в которой пользователь вводит некую кл. фразу и следующий текст: "В кл. фразе Вы можете использовать специальные символы: '*' - заменяет любую комбинацию символов; '?' - заменяет один символ. Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д. на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'." После отправки формы нужно найти и вывести все записи из таблицы с 1 текстовым полем, содержащие кл. фразу по вышеописанному алгоритму.
 
M

MajestiC

Тебе еще нужно и SQL поучить =)
Насчет масок копай в сторону MySQL LIKE с % и _
Насчет безопасности копай в сторону mysql_escape_string в подготовке sql запроса.

PS. Ты бы знал как решить эти задачи, если бы реально разрабатывал до этого сайты. Эти задачи среднего уровня для тестового задания. Кроме 2-ой, которая по сути идиотская (в реальных случаях ей нет применения), но я встречал в инете по-моему 2 реализации.
 
A

Andrew Stephanoff

Для: MajestiC
не LIKE, а MATCH(...) AGAINST(... IN BOOLEAN MODE)
лучше использовать не mysql_escape_string(), а mysql_real_escape_string()
 
M

MajestiC

Для: Andrew Stephanoff
не LIKE, а MATCH(...) AGAINST(... IN BOOLEAN MODE)
И как же реализовать "'?' - заменяет один символ" c MATCH?

лучше использовать не mysql_escape_string(), а mysql_real_escape_string()
Согласен, написал свой вариант только для того, что бы не было вопросов, если экранирование происходит до коннекта к базе.

Для: Satell
Кстати, совсем забыл. Еще советую почитать про magic_quotes_gpc и register_globals, но только для того что бы отключить эти функции и не использовать =)
 
A

Andrew Stephanoff

Для: MajestiC можно использовать wildcard - *, к тому же FULLTEXT ищет с использованием индекса, а LIKE - нет.
 
M

MajestiC

Для: Andrew Stephanoff
Быть может я ошибаюсь, но я не вижу возможности с помощью замены ? на * выполнить условие: "на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'."
Есть варианты?

Само условие:
Нужно вывести форму в которой пользователь вводит некую кл. фразу и следующий текст: "В кл. фразе Вы можете использовать специальные символы: '*' - заменяет любую комбинацию символов; '?' - заменяет один символ. Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д. на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'." После отправки формы нужно найти и вывести все записи из таблицы с 1 текстовым полем, содержащие кл. фразу по вышеописанному алгоритму.

PS. Мы не обсуждаем скорость и т.д, нужен способ который будет выполнять все условия.
PPS. Судя по примерам вообще можно предположить что каждая запись является 1 словом =)
 
S

Satell

на сервере лежит файл, шелла нет, файл с логами в панеле управления за 18 часов только, как можно сделать счётчик сколько раз его запрашивают броузеры?
 
A

aka_Kail

$login = $_REQUEST['login'];
$password = $_REQUEST['password'];
$res = mysql_query('SELECT id FROM users
WHERE login="'.$login.'" AND password="'.$password.'"');
list($user_id) = mysql_fetch_array($res);
session_start();
$_SESSION['authorized'] = isset($user_id);

Мдаааа... тут целые ворота для начинающего хакера...

если переменные не проверяются.. А они не проверяются, :huh:

представь, я ввёл заместо имени uzer это:
uzer' OR 1='1/*
И твой SOL-запрос стал таким...
'SELECT id FROM users WHERE login='uzer' OR 1='1'"
так и админ доступ можно :huh:

Сходи на античат , там поучись безопасности.. на примерах взлома...


а про предвиеву - замени imagecopyresized на imagecopyresampled
Эта ф-ция работает намного лучще.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!