SQL инъекция

Статус
В этой теме нельзя размещать новые ответы.
А у тебя там точно только числовые значения везде? Вообще, для универсальности, надо пользоваться плейсхолдерами, или на худой конец mysql_real_escape_string()
PHP:
$query = "SELECT * FROM cat WHERE 
  name='".mysql_real_escape_string($name)."'";

Ну а для чисел как советовали выше intval или int. Хотя и риал эскейп стринг подойдет - если было число, то запрос выполнится правильно, а если подсунули строку - то вернется "ничего не найдено" - пустой резалт, но во всяком случае инъекции никакой не будет.
 
Совершенно с вами согласен! Я сам пользуюсь только mysql_escape_string(), остальное - "лажа", все, что советует Фленов в своей книге "PHP глазами Хакера" - пустая трата времени и не обладает универсальностью.
 


он небезопасная! и лучше отказаться от ее использования.

используйте mysql_real_escape_string она учитывает кодировку соединения с БД.
 
проверить, является ли переменная числом
PHP:
if (!preg_match("|^[\d]+$|", $cat)) {
	exit ('fuck');
}
 
Для этого есть is_numeric(), is_int(), is_float().
 
Для этого есть is_numeric(), is_int(), is_float().
для проверки значения в базе данных (например целочисленного числа) is_numeric не годится, т.к.:
PHP:
is_numeric('123.45')===true
is_int также не годится, т.к.:
PHP:
is_int('123')===false
is_float тоже не годится, т.к.:
PHP:
is_float('123.12')===false
а также:
PHP:
is_float(123)===false
Этими функциями вообще нельзя проводить валидацию данных, полученных от пользователя, т.к. от пользователя все данные ($_GET и $_POST) приходят в строком виде, а если они уже преобразованы к нужному типу, то и в подобной валидации не нуждаются
 
Скажите пожалуйста, я тут сорудил функцию и засунул в нее все, что нашел в инете. Является ли она правильной и будет ли она работать?
PHP:
	function sql_inj ($text){
	  $text = strtolower($text);
	  $text = intval($text);
	  $text = mysql_real_escape_string($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; } else { return false; }
	}
 
rafic а на работоспособность проверить не пробовали ее? ...
или как минимум почитать назначение функций Для просмотра ссылки Войди или Зарегистрируйся

вы текст функцией intval пытаетесь преобразовать к числу ...
следовательно после вызова
$text = intval($text);
в переменной $text будет хранится число ...

а потом вы в этом "числе" найти соответствие строке "select" .. "union".. смысла в этом явно нет
 
ну я после проверил... и пришел к выводу, что нудно удалить $text = intval($text);. ну и вроде бы как работает. Но насколько это грамотно и безопасно? Я в интернете видел просто целую кучу простых способов, а из них уже собрал фунцию.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху