Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Исправить уязвимость php / 3 сообщений из 3, страница 1 из 1
23.01.2016, 23:02
    #39153785
andrey10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить уязвимость php
Начал разбираться в php. Пишу свой первый скрипт и тут заметил интересную штуку. Есть post-форма, куда пользователь вводит свой логин, далее данные записываются в переменную, например, в $username, и обрабатываются на валидность следующей функцией:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function CheckUsername($username) {
	global $error;
	global $msg;
	if (empty($username)) {
		$msg .= '1';
		$error = 1;
	}	
	if (!preg_match("/^[a-zA-Z0-9]*$/",$username)) {
		$msg .= '2';
		$error = 1;
	}
	if (strlen($username) <5 || strlen($username) >22) {
		$msg .= '3';
		$error = 1;  
	}
}



Если отправить post-запрос такой "username=1": мне напишет ошибку с сообщением "3", но если я отправлю "username[$asd]=1", то получу варнинг
Код: php
1.
"Warning: strlen() expects parameter 1 to be string, array given"

и
Код: php
1.
"Warning: strlen() expects parameter 1 to be string, array given"

и выводит сообщения 2 и 3.

Не знаю, действительно ли это уязвимость и можно ли ее использовать в недобрых целях, но хочется поправить.
...
Рейтинг: 0 / 0
23.01.2016, 23:04
    #39153786
andrey10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить уязвимость php
Ошибся, в таком порядке пишутся варнинги.
Код: php
1.
Warning: preg_match() expects parameter 2 to be string, array given 


Код: php
1.
Warning: strlen() expects parameter 1 to be string, array given
...
Рейтинг: 0 / 0
23.01.2016, 23:21
    #39153795
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить уязвимость php
Да нет тут никакой уязвимости. Банальное несоответствие типов данных. Массив же пришел, а не строка, как ожидалось.

Проверку empty заменить на is_string и добавить return false; (нет смысла проверять длину "не строки" и наличие в этой "не строке" каких-то символов).

Проверки preg_match и strlen, если допустимо генерить одно сообщение сообщение об ошибке вместо двух разных, можно выполнить только в preg_match с использованием квантификатора {5,22} вместо звезды.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Исправить уязвимость php / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]