PHP & MySQL: защита с помощью проверки полей ввода

базы данных делфи

Как лучше всего организовать безопасность ввода данных в поля ввода: addslashes, htmlspecialchars, javascript проверки ввода данных? Еще какой-то способ?

Примечание:
p.s. забыл убрать ярлычок "делфи", устанавливаемый по умолчанию...

Примечание:
>> ... и добавить ярлычок php
ну да) забыл ярлыки отредактировать, в общем...
То есть по идее, если использовать mysql_real_escape_string() для формы регистрации, то больше ничего и не нужно? Форму авторизации не нужно делать безопасной? Только те формы, где используется запись данных в БД?

Примечание:
wowan1,
> Написать свою функцию проверки.

Через регулярные что ли?

Примечание:
Ниче не понимаю... добавляю функцию mysql_real_escape_string для форм авторизации и регистрации. Регистрирую пользователя с логином "test's", но залогиниться под ним невозможно, хотя и в БД он записывается как "test\'s", и при авторизации стоит та же самая функция. ЧЯДНТ?

function reg()
{
// Ищем пользователя с именем, указанным в форме регистрации
$result = mysql_query( "SELECT * FROM `users` WHERE `user_login` = '" . mysql_real_escape_string( $_POST['user_login'] ) . "' LIMIT 1" );

// Если пользователь найден, делаем редиркт
if( mysql_num_rows( $result ) == 1 )
{ redirect( "exists" ); }

// Иначе, регистрируем пользователя
$regtime = date( 'Y-m-d H:i:s');
mysql_query( "INSERT INTO `users` (`user_ID`, `user_login`, `user_pass`, `user_regtime`) VALUES ( 'NULL' , '" . mysql_real_escape_string( $_POST['user_login'] ) . "' , '" . md5( $_POST['user_pass1'] ) . "' , '$regtime')" );
$_POST['user_pass'] = $_POST['user_pass1'];

// Делаем автоматическую авторизацию после регисрации.
auth();
}


function auth()
{
// Ищем пользователя с именем, указанным в куках
$result = mysql_query( "SELECT * FROM users WHERE user_login = '" . mysql_real_escape_string( $_POST['user_login'] ) . "' AND `user_pass` = '" . md5( $_POST['user_pass'] ) . "' LIMIT 1" );

// Еслии пользователя с таким именем нет, делаем редирект
if( mysql_num_rows( $result ) == 0 )
{ redirect( "not_auth" ); }

// Парсим полученную запись.
$user = mysql_fetch_object( $result );

// Получаем текущее время с учетом дробных частей секунды
$tm = getmicrotime();
// Вставляем запись в таблицу с сессиями.
mysql_query( "INSERT INTO `sessions` VALUES( " . $user -> user_ID . " , " . time() . " , '" . hashes( $user -> user_login , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );

// Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут
setcookie( "time" , $tm , time() + 900 , "/" );
setcookie( "user_login" , $user -> user_login , time() + 900 , "/" );

// делам редирект без параметра, т.к. никаких ошибок не было
redir( "/" );
}
Ответы:
Написать свою функцию проверки.
Дополнение #3
да но addslashes, htmlspecialchars обязательно использовать и желательно javascript что б делать предварительную проверку на стороне клиента.
>Сергей Луконин
>p.s. забыл убрать ярлычок "делфи", устанавливаемый по умолчанию...
javascript сразу однозначно нет (если только как допопция, но на сервере этим данные НЕ ДОВЕРЯЕМ). всё, что приходит от клиента (вплоть до http-заголовков), может содержать вредоностный код.
теперь к теме. чтобы добавить данные в БД, нужно использовать функцию mysql_real_escape_string()
$q = "INSERT INTO `table` SET `a` = '" . mysql_real_escape_string($a) . "'";
htmlspecialchars должна использоваться в обратном случае: если Вам что-то требуется вывести на страницу (например, юзер заполнил не все поля; чтобы его не мучать, выводим уже заполненные. и они обязательно должны выводится с помощью htmlspecialchars).


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.