Задать вопрос
@yankeenoobs

Является ли SQL запрос уязвимым к SQL инъекции?

Метод экранирования \" обеспечивает безопасность запроса от SQL инъекции или нет?

if( $accounts = $this->mysqli->query("SELECT * FROM `".DB_DB."`.`staff` WHERE `login`=\"$login\"") )
			{
				$row_cnt = $accounts->num_rows;
				if( $row_cnt != NULL )
				{
					while($row = $accounts->fetch_assoc())
					{
						if( strcmp( $row['password'] , md5($pass) ) == 0)
						{
							$this->group = $row['group'];
							return true;
						}
						else
							return false;
					}
					$accounts->close();
				}
				else
					return false;
			}
			else
				return false;
  • Вопрос задан
  • 358 просмотров
Подписаться 1 Оценить 25 комментариев
Пригласить эксперта
Ответы на вопрос 6
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Нет. Безопасность обеспечивают подготовленные выражения с плейсхолдерами.
Ответ написан
Нет. Вам нужно добиться того, чтобы внутри кавычек не было разрывающих запрос моментов, т.е. чтобы все кавычки внутри обрамляющих переменную кавычек были экранированы, нужно предусмотреть также и подстановку слэшей. Если это будет сделано, запрос будет безопасен без плейсхолдеров.
Ответ написан
SagePtr
@SagePtr
Еда - это святое
Зависит от того, откуда берётся переменная $login и обрабатывается ли она предварительно как-нибудь. Хотите гарантированно безопасный запрос - используйте плейсхолдеры. Если по каким-то причинам не можете их использовать - то экранируйте все поступающие в запрос извне переменные.
Ответ написан
index0h
@index0h
PHP, Golang. https://github.com/index0h
Является ли SQL запрос уязвимым к SQL инъекции?

Да. Пример

$login = '"; DROP TABLE `staff`;'

Метод экранирования \" обеспечивает безопасность запроса от SQL инъекции или нет?

Только в случае, если вы экранируете встраиваемые строки. Нынче это делается через плейсхолдеры.
Ответ написан
@Erling
Используйте подготовленные запросы и избавитесь сразу от многих вопросов по SQL-инъекциям. Поищите более 1-й статьи (обсуждения) по prepared statements (MySQLi || PDO) и в бой.
Ответ написан
Комментировать
Конкретно этот запрос уязвим из-за кавычек.

Советую впредь проверять сайт с помощью sqlmap или других инструментов, чтобы найти возможные SQLi. Как вариант, можно сделать онлайн с помощью pentest-tools или METASCAN.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы