Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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