Защита от инекций

Статус
В этой теме нельзя размещать новые ответы.

afonya09

Полезный
Регистрация
31 Янв 2009
Сообщения
260
Реакции
19
$login = pg_escape_string($_POST['login']);
pg_query($db, "SELECT id FROM people where \"login\"='".$login."' and \"password\"='".$password."'")

Достаточно ли pg_escape_string для защиты от инекций??
 
Я обычно использую mysql_real_escape_string. Пока проблем не было =)
 
$login = pg_escape_string($_POST['login']);
pg_query($db, "SELECT id FROM people where \"login\"='".$login."' and \"password\"='".$password."'")

Достаточно ли pg_escape_string для защиты от инекций??

можно написать подобную фукнцию проверки на инъекции
PHP:
function escape_inj($text) {
  $text = strtolower($text); // Приравниваем текст параметра к нижнему регистру
  if (
    !strpos($text, "select") && // 
    !strpos($text, "union") && //
    !strpos($text, "select") && //
    !strpos($text, "order") && // Ищем вхождение слов в параметре
    !strpos($text, "where") && // 
    !strpos($text, "char") && //
    !strpos($text, "from") //
  ) {
    return true; // Вхождений нету - возвращаем true
  } else {
    return false; // Вхождения есть - возвращаем false
  }
}
 
можно написать подобную фукнцию проверки на инъекции
PHP:
function escape_inj($text) {
  $text = strtolower($text); // Приравниваем текст параметра к нижнему регистру
  if (
    !strpos($text, "select") && // 
    !strpos($text, "union") && //
    !strpos($text, "select") && //
    !strpos($text, "order") && // Ищем вхождение слов в параметре
    !strpos($text, "where") && // 
    !strpos($text, "char") && //
    !strpos($text, "from") //
  ) {
    return true; // Вхождений нету - возвращаем true
  } else {
    return false; // Вхождения есть - возвращаем false
  }
}
гы.. а если строка закодирована? :) urldecode еще поставить надо... да и то не панацея. Хаксеры изъ...бнутся



Совет. Ставь все переменные в кавычки одинарные (ну тут стоит). и потом строго разделяй числовые переменные, т.е. к ф-ии что дал товарсич humster - делай preg_match на числа.
 
Используй регулярное выражение для логина которое пропустит только разрешенные символы, типа "А...Я A...Z 1234567890", mysql_real_escape_string, и не забывай про кавычки.
Я обычно делал так:
PHP:
function PrepareStr ($str, $maxLen=0) { //Тут можно добавить проверку на максимальную длину логина, что в принципе запретит всякие длинные и дурные значения. Например, длинна логина не больше 20 символов.
	/*if ($maxLen!=0) {
		if (strlen($str) > $maxLen) {
			echo "Hacker He-he!";
		}
	}*/
	$str= ($maxLen!=0) ? substr($str,0,$maxLen) : $str;
	return myAddSlashes(trim(strip_tags($str)));
}

function myAddSlashes($str) {
	$str = stripslashes($str);
	return addslashes($str);
} //В этой функции желательно еще добавить проверку на то включен ли magic_quotes
 
а куда все это вставляется? подскажите новичку ...
 
Пользуюсь обычно mysql_real_escape_string(htmlspecialchars($data)) но на самом деле лучше пропускать только "белые символы"
 
а зачем вы экранируете кавычки \"login\"?
 
а зачем вы экранируете кавычки \"login\"?

Запрос по привычке всегда делаю в двойных кавычках. Как следствие предпочитаю их экранировать. Да и кроме того потом, если при вводе данных в базу так фильтрануть что конечно не является универсальным, потом выводить мона спокойно данные, не фильтруя их на выходе что существенно улучшит быстродействие.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху