[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрация данных
EvilDev
Здравствуйте.
Сейчас все меня пинать начнете)) Но все же хотел поспрашивать у других людей.
Можете показать функции для фильтрации данных. Например:
Надо получить строку, логин, пароль и т.д.
Вот например написал функцию безопасного извлечения логина
Код

function NSafeLogin($Login)
{
settype($Login, "string");
$Login = substr($Login, 0, 16);
$Login = escapeshellcmd($Login);

return preg_replace("/[^\w_\-]/", "", $Login);
}

Не пинайте только, если что то упустил)

ЗЫ Пишу уже полу сонный, объяснил, как смог)
Заранее спасибо.



Спустя 2 часа, 58 минут, 16 секунд (20.07.2009 - 01:15) twin написал(а):
Цитата
Надо получить строку, логин, пароль и т.д.

А куда получить и откуда? Функция escapeshellcmd() для системных запусков... Ничего не понятно.

Спустя 12 минут, 4 секунды (20.07.2009 - 01:27) Nikitian написал(а):
Не вижу смысла фильтровать логин-пароль. Фильтрация снизит защищённость авторизации, ведь фильтруя например спецсимволы получится, что пароль !@123&(/ будет эквивалентен подбираемому с первого раза 123.
При запросах к бд используйте функцию mysql_real_escape_string() или хотя бы mysql_escape_string() и будет вам счастье wink.gif
Так же совсем не советую хранить пароль в открытом виде, а если использовать хэширование, то большинство функций хэширования на выходе выдают ограниченный набор символов (crc32() 32-битное число, md5() - 16-ричная строка, sha-1 вроде тоже 16-ричную строку выдаёт), а их уже и фильтровать не нужно как правило.

Спустя 18 минут, 15 секунд (20.07.2009 - 01:45) EvilDev написал(а):
Немного поразмыслил... Поправьте если что то где то забыл или где то не прав
Код

function NSafeLogin($Login)
{
$Login = trim(substr($Login, 0, 16));
settype($Login, "string");
$Login = preg_replace("/[^\w_\-]/", "", $Login);
// $Login = htmlspecialchars($Login);

return mysql_real_escape_string($Login);
}

function NSafePassw($Passw)
{
$Passw = trim(substr($Passw, 0, 16));
settype($Login, "string");

// Применяю MD5 в самом коде

return mysql_real_escape_string($Passw);
}

function NSafeInt($Int)
{
settype($Int, "integer");
return mysql_real_escape_string($Int);
}

function NSafeString($String, $Length = -1)
{
if ($Length > -1)
 $String = substr($String, 0, $Length);
 
$String = trim(htmlspecialchars($String));  
return mysql_real_escape_string($String);
}

function NSafeText($Text, $Length = -1)
{
if ($Length > -1)
 $Text = substr($Text, 0, $Length);
 
// Тут будут замены форматирования

$Text = trim(htmlspecialchars($Text));

return mysql_real_escape_string($Text);
}

Спустя 8 минут, 2 секунды (20.07.2009 - 01:53) Nikitian написал(а):
Если используете mysql_real_escape_string(), то не забывайте перед использование открывать соединение с базой. В ином случае используйте mysql_escape_string() - он не требует открытого соединения с базой и в большинстве случаев удовлетворяет пожелания )

И всё-таки не понимаю смысла приведения типов. Хочет человек, чтобы его пароль был больше 16 символов и имел на краях пробелы - пускай так и будет! Хочет то же самое к логину - какие проблемы?

Кстати, совсем не понимаю сервисы, которые не дают в логине использовать спецсимволы и/или кириллицу. Ну не могу придумать дл яэтого объективных причин!

Спустя 3 часа, 38 минут, 39 секунд (20.07.2009 - 05:32) twin написал(а):
EvilDev

Чтобы не гадать на кофейной гуще, реши вот эту задачку. Там все эти случаи предусмотрены. Если удастся выполнить все услоаия, значит обработано верно. Я на то, чтобы написать образец для примера, потратил 15 минут. Если ты потратишь даже целый день, все сторицей окупится в будущем. Как у меня сейчас.

Nikitian
Цитата
и/или кириллицу. Ну не могу придумать дл яэтого объективных причин!
Слышал единственное, очень притянутое за уши оправдание, что помочь юзеру не запутаться в раскладке клавы.
Глупо и смешно. smile.gif


_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
Быстрый ответ:

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