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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Безопастность сайта, Как лучше всего защищать БД 
V
    Опции темы
0Z0NE
  Дата 31.3.2013, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


HEY4
*


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

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



Доброго времени суток Уважаемые Знатоки, тема конечно заеженная но всё-же, как лучше обезопасить сайт?

Объясню свой вопрос:
Если нужно ловить пользовательские данные в числовом виде то (integer) вполне спасает, гораздо интереснее дело обстоит с текстовым типом данных, к примеру в гостевой(чате или форуме) в текстовых сообщениях достаточно использования htmlspecialchars($str, ENT_QUOTES, 'cp1251'). Однако, при использовании форм авторизации желательно "восприятие" спецсимволов дабы повысить защиту, так вот собственно вопрос, какие символы (кроме кавычек естественно) можно использовать при записи\чтении в(из) БД, и в каком формате лучше всего записывать допустимые символы(в виде HTML сущностей или в "открытом" виде?).

Есть несколько кусочков кода над которыми размышляю...

Оригинал строки: формируеться в браузере как: linkB ?> # - -- / \* // ?> # ' "
Код

echo $str = '<a href="link">link</a><b>B</b> ?> # - -- / \* // ?> # \' "';


"Выпиливание"(замена) из строки определённых символов: формируеться в браузере как: ahreflinkBlinkabBbdd, такой себе "топорный" вариант, зато 100% ни один спецсимвол который был запрещен не останеться в живых. Еще плюс(как по мне) то можно определённые символы заменять на какуюлибо определённую раннее соль, к примеру @$string_danger = str_replace("*", "salt_1543", $string_danger);, хотя вроде уже тянет на изврат  smile 
Код

function screen($string_danger){
@$string_danger = str_replace("'", "",$string_danger);
@$string_danger = str_replace("\"", "", $string_danger);
@$string_danger = str_replace(" ", "", $string_danger);
@$string_danger = str_replace("-", "", $string_danger);
@$string_danger = str_replace("*", "", $string_danger);
@$string_danger = str_replace("\\", "", $string_danger);
@$string_danger = str_replace("/", "", $string_danger);
@$string_danger = str_replace(">", "", $string_danger);
@$string_danger = str_replace("<", "", $string_danger);
@$string_danger = str_replace("=", "", $string_danger);
@$string_danger = str_replace("?", "", $string_danger);
@$string_danger = str_replace("#", "", $string_danger);
return $string_danger;
};
echo(screen($str));


Собственно сама перегонка в HTML сущности, с екранированием кавычек: формируеться в браузере как: <a href="linkB">link</a><b>B</b> ?> # - -- / \* // ?> # ' ", помоему самый лучший вариант для форм отправки сообщений во всякие чаты\ответы на темы на форуме, однако стоит-ли использовать такой подход в формах авторизации?
Код

echo(htmlspecialchars($str,ENT_QUOTES,'cp1251'));


Ну и конечно-же использование mysql_real_escape_string: формируеться в браузере как: linkB ?> # - -- / \\* // ?> # \' \", с учётом что атрибут href тега <a> так-же подвергаеться экранированию кавычек(как в принципе и ожидаеться), однако mysql_real_escape_string никак не экранирует те-же символы = или /* или -- (что вродебы так-же являеться комментарием)
Код

print mysql_real_escape_string($str);


Еще раз напомню вопрос(в сжатом виде): Что из приведенного выше кода разумнее(правильнее?) использовать при проверке данных из форм авторизации?

Сейчас используеться конструкция вида:
Код

@$login_danger = str_replace("'", "",$_POST['login']);
@$login_danger = str_replace("\"", "", $login_danger);
@$login_danger = str_replace(" ", "", $login_danger);
@$login = trim($login_danger, "@.\-!#,%/|?>*<=$&()^:;\\[]{}~` ");
$length_login = strlen($login);

хотя trim() работает только тогда когда последовательность спецсимволов введенных пользователем совпадают с последовательностью спецсимволов в trim()  smile 
PM MAIL   Вверх
Arantir
Дата 31.3.2013, 16:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



Не используйте старьё, вроде библиотеки mysql, она уже давно заменена на mysqli.
Используйте предподготовленные выражения вместо изобретания велосипеда.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
0Z0NE
Дата 31.3.2013, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


HEY4
*


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

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



Спасибо за совет, почитаю, однако сайт почти дописанный(да я не правильный сначала пишу всё, а потом вспоминаю что существует ещё и безопастность smile ) и начинать всю работу с нуля ... особенно изучая обновленные(новые?) технологии думаю будет долговасто... хотелось-бы уже сделать всё на "старье" и после уже более-мение изучив обновленную библиотеку обновлять сайт, ибо такие перепады с одного на другое так-же могут стать "дырой", в конце концов опыт охоты с каменным топором и палкой тоже может пригодиться при охоте с ружьём  smile 

Это сообщение отредактировал(а) 0Z0NE - 31.3.2013, 16:34
PM MAIL   Вверх
Arantir
Дата 31.3.2013, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



Цитата(0Z0NE @  31.3.2013,  15:32 Найти цитируемый пост)
особенно изучая обновленные(новые?) технологии думаю будет долговасто

Ну ей уже как 10 лет скоро будет... Еще с 2004-го вместе с PHP 5.0 появилась...

Да и, в конце-концов,  писать все эти кучи строчек из первого поста вы готовы, а поменять пару старых и добавить пару новых строчек — это уже долго?


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Fortop
Дата 31.3.2013, 22:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



0Z0NE, вместо столбиков str_replace
можно посмотреть в сторону strtr()
если уж хочется использовать свой вариант


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Aliance
Дата 1.4.2013, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(0Z0NE @  31.3.2013,  16:15 Найти цитируемый пост)
@$login_danger

а какой смысл писать так?
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 1.4.2013, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



//offtop
нужно сделать раздел "Вопросы по истории"  smile 


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


Рыбак без удочки
**


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

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



[offtopic]
Цитата(Gold Dragon @  1.4.2013,  13:33 Найти цитируемый пост)
нужно сделать раздел "Вопросы по истории"  
Надо просто сделать дополнительно поле при создании темы:
Укажите год выпуска/публикации тематического материала (учебник, статья, мануал...), в результате изучения/чтения/ознакомления с которым у вас возник описанный вами вопрос: 
И варианты:
2 года назад
1 год назад
В этом году

Других вариантов не предоставлять =))
[/offtopic]

Это сообщение отредактировал(а) Arantir - 1.4.2013, 18:59


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 1.4.2013, 20:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В качестве фильтрации текста порекомендую вкусный инструмент jevix


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
0Z0NE
Дата 2.4.2013, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


HEY4
*


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

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



Цитата(Fortop @  31.3.2013,  22:30 Найти цитируемый пост)
можно посмотреть в сторону strtr()

о! похоже именно то что нужно, сча попробуемс... Спасибо большое)

Цитата(Aliance @  1.4.2013,  10:27 Найти цитируемый пост)
а какой смысл писать так?

на всякий пожарный экран от ошибок, хотя 99,9999% он лишний но паранойяжЭ smile 

Цитата(Sanchezzz @  1.4.2013,  20:23 Найти цитируемый пост)
В качестве фильтрации текста порекомендую вкусный инструмент jevix

ого премоч, не натыкался и даж не думал что такие водяться  smile   Спасибо большое, посмотрю и этот вариант(когда научусь руками всё делать и не задавать глупых вопросов)

Цитата(Arantir @  1.4.2013,  18:58 Найти цитируемый пост)
Укажите год выпуска/публикации тематического материала (учебник, статья, мануал...), в результате изучения/чтения/ознакомления с которым у вас возник описанный вами вопрос: 

 smile я вот понять не могу чем неугодила Вам пускай и древненькая библиотека MySQL? наоборот по старинке надёжнее будет а переходить куда либо не разобравшись ИМХО поопаснее будет  smile 
З.Ы. не в обиду будь сказано но это как паника с DIV, вроде круто и модно вроде и плюсы есть но спозиционировать кроссбраузерно див порой по коду выходит в пару раз больше нежели таблицами  smile
PM MAIL   Вверх
Aliance
Дата 2.4.2013, 16:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(0Z0NE @  2.4.2013,  16:10 Найти цитируемый пост)
на всякий пожарный экран от ошибок, хотя 99,9999% он лишний но паранойяжЭ 

во-первых, это крайне неправильно. во-вторых, если уж и использовать этот костыль, то правильно.
Цитата

Note: The @-operator works only on expressions. A simple rule of thumb is: if you can take the value of something, you can prepend the @ operator to it. For instance, you can prepend it to variables, function and include calls, constants, and so forth. You cannot prepend it to function or class definitions, or conditional structures such as if and foreach, and so forth.


Цитата(0Z0NE @  2.4.2013,  16:10 Найти цитируемый пост)
я вот понять не могу чем неугодила Вам пускай и древненькая библиотека MySQL?

видимо, программирование - не ваша основная деятельность, иначе бы вы знали, что тенденции очень динамичны и кто не успевает за ними - в отстающих.

Цитата(0Z0NE @  2.4.2013,  16:10 Найти цитируемый пост)
З.Ы. не в обиду будь сказано но это как паника с DIV, вроде круто и модно вроде и плюсы есть но спозиционировать кроссбраузерно див порой по коду выходит в пару раз больше нежели таблицами

по-моему, такая паранойя была лет 5 назад, сейчас уже никто таблицами не верстает, поэтому и паранойи нет.
PM MAIL WWW ICQ Skype   Вверх
0Z0NE
Дата 2.4.2013, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


HEY4
*


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

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



Спасибо за объяснение ошибки с @, буду пытаться исправляться

Цитата(Aliance @  2.4.2013,  16:06 Найти цитируемый пост)
видимо, программирование - не ваша основная деятельность

Да Вы правы, профессионально не программирую, просто интересно бывает чегонить написать, особенно если ОНО( smile ) работает  smile , ну а что-б не просто "лепить абы чего" иногда пытаюсь узнать как лучше сделать. Порой и для мозга зарядка, и своего рода творчество (каюсь за оффтоп)

Думаю дабы не разводить флуд тему пора закрывать, Спасибо еще раз всем кто помог и ткнул носом на путь истинный  smile

Это сообщение отредактировал(а) 0Z0NE - 2.4.2013, 17:01
PM MAIL   Вверх
Gold Dragon
Дата 3.4.2013, 07:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



0Z0NE, MySQL отличная вещь.... была когда-то.. Я просто уже давно использую "подготовленные выражения" и просто забыл что такое инъекции. Это давно в прошлом.. По этому тут всё чаще начинают смеяться над теми кто до сих пор пытается что-то придумывать из десятков (сотен) строк кода чтобы повысить безопасность.. Особенно когда приводят примеры из древнейших учебников. Хотя просто достаточно сделать очень маленький шаг вперёд и все эти глупости пройдут. А будешь упрямо сидеть на старье, никогда не шагнёшь со всеми в ногу  smile 


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


Рыбак без удочки
**


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

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



Цитата(0Z0NE @  2.4.2013,  14:10 Найти цитируемый пост)
наоборот по старинке надёжнее будет

Сори, это утверждение в программировании не работает =)

Цитата(0Z0NE @  2.4.2013,  14:10 Найти цитируемый пост)
это как паника с DIV, вроде круто и модно вроде и плюсы есть но спозиционировать кроссбраузерно див порой по коду выходит в пару раз больше нежели таблицами

В отличии от обсуждаемой в данной теме вопроса, таблицы никогда не предназначались для верстки структуры страницы. Они должны были быть только таблицами, как br является только переносом строки, а hr — только линией. Просто больше всякие выверты верстать было нечем.

Цитата(0Z0NE @  2.4.2013,  14:10 Найти цитируемый пост)
я вот понять не могу чем неугодила Вам пускай и древненькая библиотека MySQL?
Она мне ничем не неугодила. Мне не угодили ваши неаргументированные решения. Существует способ, позволяющий решить вашу проблему в самом ее корне, скорее даже исколючить саму причину этой проблемы, и при этом вы отказываетесь от этого способа, ссылаясь лишь на собственное субъективное восприятие.
Если бы не ставилось вопроса о инъекциях (например, все запросы захардкодены и неизменяемы), то и предложения о mysqli с предподготовленными запросами, скорее всего, не последовало бы.

Если вам хочется "просто для души", то лучше почитайте, как работают те же предподготовленные запросы. Далеко не все "остатки истории" программирования напрямую полезны для изучения. SQL-инъекции — это проблема, которая "вылезла боком" из-за невозможности предусмотреть сразу все и вся. И посимвольная фильтрация — это, в принципе, просто "костыли", средства для борьбы с последствиями существования этой проблемы. Предподготовленные запросы же — это устранение проблемы, как таковой, так сказать, настоящее решение проблемы.

Это сообщение отредактировал(а) Arantir - 3.4.2013, 08:23


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
0Z0NE
Дата 3.4.2013, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


HEY4
*


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

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



Gold DragonArantir, это всё любовь нашего народа изобретать вилосипеды smile  а если серьезно то признаю что отношусь с опаской ко всему новому, сама тема библиотеки MySQLi интересна хотя-бы в плане расширения кругозора, однако как-то страшно ставить свои кровавые експерименты на почти дописаном сайте)

P.S. пока только окинул взглядом документацию, не углублялся, посему ничего конкретного не могу сказать, отчасти интересно, отчасти лениво перебирать по косточкам написанные конструкции где (как Вы уже догадались) каждая переменная полученная от пользователя "фильтруеться" методами наподобие тех, что описаны в первом посту, скорее всего переходить буду, но не сразу ибо нужно хотя-бы подпривыкнуть к конструкциям вида mysqli::$client_info, не говоря уже хотябы о частичном осознании смысла и логики того что я буду делать.

Это сообщение отредактировал(а) 0Z0NE - 3.4.2013, 11:53
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.

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


 




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


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

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