powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Исправить уязвимость php
3 сообщений из 3, страница 1 из 1
Исправить уязвимость php
    #39153785
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал разбираться в 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
Исправить уязвимость php
    #39153786
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибся, в таком порядке пишутся варнинги.
Код: 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
Исправить уязвимость php
    #39153795
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет тут никакой уязвимости. Банальное несоответствие типов данных. Массив же пришел, а не строка, как ожидалось.

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

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


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