Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверка введенных данных, все ли учтено? 
:(
    Опции темы
Артем125
Дата 20.9.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Посмотрите, все ли учтено от инъекций и не создаст ли трудностей. Переданные данные - это любой текст, (а также теги description, keywords,title и т.д) который будет общедоступно заполнять статическую Интернет страничку
Код


// Если не нажата кнопка *** (Сохранить), то функция вызвана по ошибке
    if (!($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['латинские буквы и цифры']))) {
        header( 'Location: '.$_SERVER['PHP_SELF'] );
        die();
    }
    
        
    // Обрезаем лишние пробелы
    if (isset($_POST['page_text']))    $page_text    = trim( $_POST['page_text'] );    else $page_text = '';
    ....    
    
    // Обрезаем переменные до длины, указанной в параметре maxlength тега input
    $page_text    = substr($page_text, 0, 10000);
    ....
  
    $error = '';
    // Проверяем, заполнены ли обязательные поля
    if (empty($page_text))    {
        $error = $error.'<li>не заполнено поле "Текст"</li>'."\n";
    }
    
    // Проверяем поля формы на недопустимые символы
    if (!empty($page_text) and !preg_match("#^[-.;:,?!\/)(_\"\s0-9а-яА-Яa-z]+$#i", $page_text)) {
        $error = $error.'<li>поле "Текст" содержит недопустимые символы</li>'."\n";
    }
    
    // Если были допущены ошибки при заполнении формы - 
    // перенаправляем оператора для исправления ошибок
    if ( !empty( $error ) )
    {
        ... Редирект в обратку
    }
    
    $result = mysql_query( "INSERT INTO ".TABLE_Ляляля." 
                            (
                            `page_id`,
                            ...
                            `page_date`,
                            ....
                            `page_text`
                            )
                            VALUES 
                            (
                            '',
                                                        ...
                            '".time()."', Чего то не работет ((
                            ...
                            '".mysql_real_escape_string($page_text)."'
                            )" );


Это сообщение отредактировал(а) Артем125 - 20.9.2009, 13:54
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Вопросы.
1. Что такое "статическая Интернет"?
2. За что мучать сервер бесконечным циклом, если к скрипту обратились не через форму?
3. Зачем каждое поле проверять по три раза, а не один? 
4. Удалось бы вам написать свой вопрос на этом форуме, если бы он проверял вводимый текст на "недопустимые" символы?

PM MAIL   Вверх
Артем125
Дата 20.9.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



1) Интернет страничка, контент забивается через Веб интерфейс. Основные теги и контент
2) второй вопрос не понял((
3) так удобней все читать, группировать, ведь не одна переменная, а около десяти
4) вот потому и задался я таким вопросом )), для тегов это актуально, для контента видимо ограничивает

Это сообщение отредактировал(а) Артем125 - 20.9.2009, 14:05
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



1. Старайтесь писать более внятно. Если имеется в виду страница, то надо писать это слово. Если эта страница не лежит в готовом к отдаче виде, а формируется скриптом из базы данных, то это не статическая страница, а динамическая.
Что значит "основные теги"? Насколько я вижу, проверка на недопустимые символы не пропустит ни одного.

2. Зачем в строках 2-4 организован бесконечный цикл?

3. Неужели 30 одинаковых проверок удобнее, чем 10? Ну, на вкус и цвет...

4. Я не понял. Кому задан вопрос? Для кого эти символы "недопустимые"? Для незнакомого дяди в интернете? или все-таки для собственного произведения? 
Кроме вас никто не знает, какие на вашей "статической интернете" символы допустимы, а какие - нет.

Если данные вводятся общедоступно, то достаточной защитой от всяких яваскрипт-гадостей будет применение функции htmlspecialchars() при выводе данных.
При этом все теги, и основные, и не основные, будут выведены текстом, а не обработаны браузером.
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



1) Простите, заработался. Есть форма, в которую вводят данные. Эти данные заносятся в б.д., оттуда при формировании динамической страницы попадают в теги title, description, keywords, основной контент этой страницы.
2) Это защита от подделки заголовков(возможно не прав). Если в $_POST не передано имя кнопки отправить ("латинские буквы и цифры"), то значит функция вызвана неправильно, может по ошибке. И кстати, почему бесконечный цикл. Если данные не верны, то редирект на главную страницу, а там ожидать действий пользователя
3) -
4) Главная задача часть данных обработать с защитой от инъекций и тегов, контент же только от инъекций и некоторых тегов, например td. Ведь после проверки данные сохраняются в базе

Это сообщение отредактировал(а) Артем125 - 20.9.2009, 14:37
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Вы полагаете, что $_SERVER['PHP_SELF'] - это так на РНР называется главная страница? попробуйте найти описание этой переменной.
Цитата(Артем125 @  20.9.2009,  14:23 Найти цитируемый пост)
Главная задача часть данных обработать с защитой от инъекций

каких инъекций?
Цитата(Артем125 @  20.9.2009,  14:23 Найти цитируемый пост)
Теги как раз и не нужны, кроме как <p> в основном контенте

а зачем нужен <p>?
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Инъекции, вроде таких

Код

SELECT username, realname FROM users WHERE cityid='20' UNION SELECT username, password AS realname FROM users WHERE 1 OR '1'  AND age<'35'



<p> это тег абзаца, например, если не доработаны стили в шаблоне той страницы, в которую попадают обработанные данные из бд. 

Вообще, попробую выразиться по другому: все переданные данные должны обрабатываться от инъекций. Часть из них должна очищаться (или как угодно, экранироваться и т.п.) от тегов, другая часть лишь от избранных тегов (например <td><tr>).  



Это сообщение отредактировал(а) Артем125 - 20.9.2009, 14:52
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



От sql инъекций защищает строка 48 приведенного кода. 
Больше ничего не нужно.

Про стили не понял. 
Этот человек, который вводит информацию в форму, вот так и пишет - со стилями и параграфами? 
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Про стили не понял. 
Этот человек, который вводит информацию в форму, вот так и пишет - со стилями и параграфами?  

Ну например, сделал я шаблон. Вот так человек и пишет - с параграфами, а кто его знает, ну например, надо ему 2 строки отступить, вот он и добавляет тег <p>

"текст про чебурашку ......

<p></p>
И вот тут он нагнал серого волка///
"  

Получается строка 23 избавляет от тегов, да?, 48 от инъекций. А как бы избавиться от части тегов, например <td>,что бы конструкция из таблиц не полетела?

Это сообщение отредактировал(а) Артем125 - 20.9.2009, 15:03
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



а почему этот человек просто два раза в текстарии на ентер не нажмет?
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



ну может и нажмет, а может и не нажмет , в конце концов не сообразит  smile . Честно сказать не думал, что сработает. 


Все же, может ему какие-то теги понадобятся, что ему тогда и мне делать и тут я прав? что строка 23 избавляет от тегов, да?, 48 от инъекций. 


Это сообщение отредактировал(а) Артем125 - 20.9.2009, 15:09
PM MAIL   Вверх
Simpliest
Дата 20.9.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



Цитата(Артем125 @  20.9.2009,  14:59 Найти цитируемый пост)
А как бы избавиться от части тегов, например <td>

http://ua.php.net/manual/en/function.strip-tags.php


Цитата(Артем125 @  20.9.2009,  13:44 Найти цитируемый пост)
Код

// Если не нажата кнопка *** (Сохранить), то функция вызвана по ошибке
    if (!($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['латинские буквы и цифры']))) {

А где здесь проверяется нажатие кнопки "Сохранить"?


--------------------
user posted image
PM   Вверх
Артем125
Дата 20.9.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



А где здесь проверяется нажатие кнопки "Сохранить"?  

ага, конечно, вот форма для отправки 
Код


<input type="submit" name="X234" id="submit" value="Сохранить"> 


// Если не нажата кнопка X234(Сохранить), то функция вызвана по ошибке
    
Код
 if (!($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['X234']))) {


Спасибо за ссылку smile 


Это сообщение отредактировал(а) Артем125 - 20.9.2009, 15:12
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Откуда у вас в форме возьмется человек, которому придет в голову писать в нее <p></p>?
Вам же не приходит?

Задача валидации html - сложная и муторная в решении.
Оно вам надо? 
Пусть пишут только текст. 
Если хочется хитрого оформления для фанатиков - bb-code или Wiki-разметка.




PM MAIL   Вверх
Артем125
Дата 20.9.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Ну вообще - то. Если сломают авторизацию, не смогут базу попортить., может и не прав конечно, вообще то это админка. Просто хотел еще в добавок сделать защиту от дурака  smile 
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Simpliest, поскольк документацию все равно никто не читает, то надо рядом со ссылкой всегда обязательно дублировать, что
если функция вызывается с исключениями, то для той задачи, ради которой она обычно используется, strip_tags становится абсолютног бесполезной 

Добавлено @ 15:17
Цитата(Артем125 @  20.9.2009,  15:13 Найти цитируемый пост)
Если сломают авторизацию, не смогут базу попортить., 

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

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

Это сообщение отредактировал(а) Ипатьев - 20.9.2009, 15:18
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



А что бы получить чистый текст без тегов подойдет строка 23?
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



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

Это сообщение отредактировал(а) Ипатьев - 20.9.2009, 15:25
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



редирект, если введен  тег?, да?

Это сообщение отредактировал(а) Артем125 - 20.9.2009, 15:28
PM MAIL   Вверх
Ипатьев
Дата 20.9.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



эта строка не позволяет получить чистый текст без тегов 
она позволяет получить Редирект в обратку
PM MAIL   Вверх
Артем125
Дата 20.9.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

Репутация: нет
Всего: нет



Понял, Вам Ипатьев респект и уважение за ответы и терпение!

Это сообщение отредактировал(а) Артем125 - 20.9.2009, 15:30
PM MAIL   Вверх
Gold Dragon
Дата 21.9.2009, 13:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



может я просмотрел по тексту это замечание... но с чем сам сталкивался.. 

Если должны оставаться кроме чистого текста ещё и тэги, то с "обрезание" строки не всё так просто. Ты можешь обрезать по тэгу или, например, отрезать закрывающийся, а потом страница в будущем у тебя явно будет не валидной и скорее всего поползёт. Наверное, самый лучший способ - это контролировать количество символов при вводе или же сначала предупредить при отправке, а потом обрезать


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Strilo4ka
Дата 22.9.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



воше то от скул иньекции строка в запросе два раза пропускаеться у вас Артем125,  !!! Ну в прынцыпе ничего страшного, но по умолчанию пхп настроен так что он сразу фильтрует, тоэсть "магические кавычки " включены. Все даные, неважно как они передаються, то ли гет, пост, в куках они фильтруються (екранируються). Можно просто сделать так если директива включена то не фильтруем, а если выключена то пропускаем через mysql_escape_string(). А воше мне еще нравится функция intval() она помогает тоже. Но у нее есть один недостаток. Она переводит строку в число О. Тоесть всегда будет выводится одна запись. Ну и substr в помощь !!!smile

Добавлено через 5 минут и 13 секунд
 
Код

if (!get_magic_quotes_gpc())
    {
     /* пропускаем сами через mysql_escape_string*/
    }



а еще после sttip_tags, trim еще можно через htmlspecialchars пропустить

PM ICQ   Вверх
Strilo4ka
Дата 22.9.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



и когда запрос выполняеться не мешало б @ поставить перед mysql_query на всякий случай!!! ООО и еще одна идеяка появилась, допустим хакер скопировать форму и хочет подменять даные, то можна написать функции защиты от заполнения маленькую (в нете встречал) типа такой вот 

Код

function false_form()
{
//защита формы от заполнения
$referer=$_SERVER["server_name"];

if(!preg_match("#www.kybik-rubik#", $referer))
    {
    echo "ХЕ-ХЕ:)...\n";
      exit;
    }
}


а потом просто в скриптах где форма поподключать... С другими какими то переменными масива сервер еще поиграться можно !!!

PM ICQ   Вверх
Ипатьев
Дата 22.9.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



это чудовищно. 
ТАКОЙ каши в голове я никогда в жизни не встречал.
PM MAIL   Вверх
Strilo4ka
Дата 22.9.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



а какая тут каша???
PM ICQ   Вверх
Simpliest
Дата 22.9.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



Цитата(Strilo4ka @  22.9.2009,  23:02 Найти цитируемый пост)
а какая тут каша??? 

Гречневая вперемешку с пшенной.


--------------------
user posted image
PM   Вверх
Ипатьев
Дата 22.9.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Strilo4ka, если вы напишете эти свои "рекомендации" отдельным постом, то я постараюсь объяснить ошибки. 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.