[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита и обработка данных, регулярки
SarPHP
Какими еще функциями можно/нужно обрабатывать данные перед их внесением в базу и во время вывода ее в поток? Пока что я ограничиваюсь этим, но чувствую слабенькая защита:

Обработка комментариев перед занесением в базу:
$str = trim($str);
$str = stripslashes($str);
$str = htmlspecialchars($str);

Обработка данных при выводе в поток:
htmlspecialchars($str) - строковые данные (VARCHAR, TEXT и т.д.)
(int)$str - числовые данные (INT)

Обработка GET запроса (в случае если он числовой):
$id = $_GET['id']; $id = (int)$id; $id = stripslashes($id); $id = htmlspecialchars($id);


Еще я слежу за инпутами, ставлю ограничение на количество введенных символов (например при 20 символах сложновато будет составить SQL-инъекцию в такую длину). Целесообразно ли вообще это?


Помогите еще составить регулярки для обработки логина с паролем (можно ткнуть ссылкой с гугла, если лень расписывать):

- регулярка для логина (запрещено использовать одновременно латиницу и кириллицу и "опасные" недосимволы).

- регулярка для пароля (запрещено использовать кириллицу и "опасные" недосимволы).



Спустя 4 минуты, 58 секунд (10.01.2011 - 15:09) vasa_c написал(а):
Все ваши действия абсолютно бессмысленны в отрыве от контекста.

Первое условие для действенной защиты - понимать что происходит, что может произойти и как это контролировать. Вы не понимаете, поэтому первым делом разберитесь, зачем нужна каждая из этих функций.

Спустя 1 минута (10.01.2011 - 15:10) hellmin написал(а):
Используй mysql_real_escape_string()
http://ru.php.net/manual/en/function.mysql...cape-string.php

Спустя 4 минуты, 46 секунд (10.01.2011 - 15:15) SarPHP написал(а):
vasa_c, вот конкретно вы - какими бы функциями воспользовались для обработки комментариев, регулярки к логинам и паролям (в целом у всех сайтов почти всегда одна и та же защита); может у вас есть заготовочки, шаблончики? скиньте, а я сам доразберусь smile.gif а так я в курсе что каждая функция делает и с чем ее едят, мне вот нужно еще добавочки wink.gif

hellmin, принято wink.gif упустил из виду эту функцию

Спустя 3 минуты, 1 секунда (10.01.2011 - 15:18) Игорь_Vasinsky написал(а):
Цитата
Какими еще функциями можно/нужно обрабатывать данные перед их внесением в базу и во время вывода ее в поток? Пока что я ограничиваюсь этим, но чувствую слабенькая защита:


- во первых - как сказано в предидущем сообщении.

+ можешь ограничить кол-во символов
+ ты уж сам реши - какие символы использовать, для этого - регулярки в помощь.

Спустя 56 секунд (10.01.2011 - 15:19) vasa_c написал(а):
Перед вставкой в базу, данные следует привести к формату пригодному для вставки (или воспользоваться библиотекой, которая сама приводит). При использовании php_mysql, это mysql_real_escape_string().

При выводе в HTML, следует привести к HTML-виду - htmlspecialchars().

Всё остальное только в зависимости от условий конкретной задачи.

Обращаю внимание, что это не защита от инъекций, а приведение к нужному для вставки формату. Защита от инъекций это приятное побочное являение.

Спустя 5 минут (10.01.2011 - 15:24) SarPHP написал(а):
Хорошо. Вот я привел к нужной форме данные для вставки. Вставляю ее. Потом правильно вывожу. Что дальше? Как защитить сайт от инъекций. У меня самые обычные, классические требования к защите.

Цитата
+ ты уж сам реши - какие символы использовать, для этого - регулярки в помощь.


Ну я написал какие символы использовать (в случае с логином и паролем); ну есть же стандарты обработки для логина и пароля, например, как делают это punbb и vbulletin

Спустя 1 час, 39 секунд (10.01.2011 - 16:25) Invis1ble написал(а):
SarPHP
Читай здесь

Спустя 1 час, 15 минут, 47 секунд (10.01.2011 - 17:40) alex12060 написал(а):
Паранойа)

На самом деле, чтобы не париться, я имею при себе 2 функции)


function protect($string) {
$string = mysql_real_escape_string($string);
$string = strip_tags($string);
$string = addslashes($string);
$string = htmlspecialchars($string);
$string = trim($string);

return $string;
}

/* И еще */

function is_num($num)
{
if (empty($num)) { return false; }
if (!preg_match ("/[0-9]/i", $num)) { return false; }
return true;
}


Но 1 функция хоть и не пропустит ничего, но она:
- Тяжелая
- Экранирует кавычки (John\\\\\\\\\'s book)

Вторая простая) На регулярке) Можно просто использовать)

Как бы так)

Спустя 7 минут, 55 секунд (10.01.2011 - 17:48) Invis1ble написал(а):
alex12060
Ты читал тот топик? Там все по полочкам разложено. А паранойа - это твои функции =)
Достаточно двух штатных функций - mysql_real_escape_string() для защиты от SQL-inj и htmlspecialchars() от XSS-атак.

Спустя 4 часа, 56 минут, 33 секунды (10.01.2011 - 22:45) SarPHP написал(а):
Ребят. Вы определитесь у кого из вас паранойя, пока у меня она не началась! biggrin.gif

Invisible, не думаю, что однозначно можно утверждать, что две эти функции позволяют обеспечить стопроцентную защиту от SQL-инъекций и XSS-атак. Но в целом, они обеспечивают какую-никакую защиту, ну, наверно, на 99.9% случаев. smile.gif

А функция stripslashes не помешает? Я ее тоже использую rolleyes.gif

А что там с регулярками для логина и пароля? Мне тоже подойдет штатный вариант) Ссылку можно или примерчик? tongue.gif

Спустя 19 минут, 49 секунд (10.01.2011 - 23:05) Invis1ble написал(а):
SarPHP
stripslashes() юзают для запросов в связке с mysql_real_escape_string(), если магические кавычки включены.
А зачем тебе регулярки для логина и пароля?

Спустя 7 минут, 37 секунд (10.01.2011 - 23:12) SarPHP написал(а):
Invis1ble, у меня на сайте при регистрации (по умолчанию) можно в логине и пароле одновременно использовать как латиницу, так и кириллицу..

То есть, зарегистрируется человек с никами "молоко" и "мoлoкo", где во втором случае буква "о" из латинского алфавита. По сути два разных ника получаются, а на визуальном уровне один. Некоторые шибко умные пользователи на этом могут позабавиться wink.gif


Цитата
stripslashes() юзают для запросов в связке с mysql_real_escape_string(), если магические кавычки включены.


ну они же по умолчанию включены.. поэтому и использую для обработки абсолютно всех данных.. huh.gif

Спустя 48 секунд (10.01.2011 - 23:13) Dron19 написал(а):
Цитата (alex12060 @ 10.01.2011 - 14:40)
Паранойа)

На самом деле, чтобы не париться, я имею при себе 2 функции)


function protect($string) {
$string = mysql_real_escape_string($string);
$string = strip_tags($string);
$string = addslashes($string);
$string = htmlspecialchars($string);
$string = trim($string);

return $string;
}

/* И еще */

function is_num($num)
{
if (empty($num)) { return false; }
if (!preg_match ("/[0-9]/i", $num)) { return false; }
return true;
}


Но 1 функция хоть и не пропустит ничего, но она:
- Тяжелая
- Экранирует кавычки (John\\\\\\\\\'s book)

Вторая простая) На регулярке) Можно просто использовать)

Как бы так)

Сразу понятно что ты эти функции только что выдумал =), потому что писал со спешкой и теперь эта функция вернет тру только если во входящем аргументе только одна цифра, ты плюсик забыл =)

Спустя 18 часов, 24 секунды (11.01.2011 - 17:13) SarPHP написал(а):
Помогите с регулярками к логину и паролю. Теме ап smile.gif

В инете искал, что-то ничего нормального нет, может кто ссылку даст с нормальной литературой, как правильно составлять их.

Спустя 15 минут, 41 секунда (11.01.2011 - 17:29) Invis1ble написал(а):
SarPHP
Видимо плохо искал. Вот здесь почитай.

Спустя 5 минут, 43 секунды (11.01.2011 - 17:35) hellmin написал(а):
Когда я что-то подобное делал то писал регулярку так
preg_match('/[0-9a-z_]{5,10}/i', $pass)

что означает использовать цифры + буквы латинского алфавита + знак подчеркивания, чтобы их было не менее пяти и не более 10... i - модификатор регистро-независимое сравнение. Такая проверка подойдет и для проверки логина. Если надо русские буквы то так
preg_match('/[0-9a-zа-я_]{5,10}/i', $pass)

Спустя 23 минуты, 25 секунд (11.01.2011 - 17:58) Basili4 написал(а):
alex12060

function protect($string) {
$string = mysql_real_escape_string($string);
$string = strip_tags($string);
$string = addslashes($string);
$string = htmlspecialchars($string);
$string = trim($string);

return $string;
}



на говонокод.

вторую
function is_num($num)
{
if (empty($num)) { return false; }
if (!preg_match ("/[0-9]/i", $num)) { return false; }
return true;
}

туда же

Как надо
1. если выводишь в браузер htmlspecialchars($string);
если пишешь в базу mysql_real_escape_string($string);

2. (int)$num

если циферь то все будет ок если нет будет 0.


Спустя 3 часа, 12 минут, 50 секунд (11.01.2011 - 21:11) DedMorozzz написал(а):
Проще выражение пропустить 2мя регулярками. Если та которая проверяет только латиницу - нашла что-то и та, которая кирилицу - выдаёшь уведомление. Можно сваять одну, но выйдет крокодил, который будет работать крайне долго


_____________
Вольный веб-дизайнер, идейщик с постоянным чувством информационного голода; когда знания ценнее денег - когда узнаешь новое и уважаешь в прошлое уходящее..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.