Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Несколько вопросов о безопасности [2]
Форумы портала PHP.SU » » Вопросы новичков » Несколько вопросов о безопасности

Страниц (3): « 1 [2] 3 »
 

16. EuGen - 27 Июня, 2013 - 11:39:58 - перейти к сообщению
likvidator пишет:
- это так круто,то почему все крупные проекты юзают куки????

Вероятно, Вы не очень хорошо себе представляете механизм работы сессии. На деле, при открытии сессии, ключ доступа к ней отправляется клиенту, но данные сессии хранятся на сервере. Распространённым способом хранения ключа сессии является кука (та самая PHPSESSID как пример).

Теперь вспомните о том, как работает HTTP-протокол. При переходе по ссылке он отправит (на самом деле "он" - это, конечно, браузер, который следует HTTP-протоколу) в Request-запросе куки, относящиеся к домену того хоста, на который делается запрос. И, значит, ключ сессии будет передан таким образом через HTTP-запрос. Если соответствующая сессия открыта на сервере, то есть ключ распознался - клиент получает доступ к данным сессии.

Так вот, собственно, http_only означает, что ключ сессии может быть получен/передан/установлен только через HTTP-протокол, но не через иные средства. То есть, к примеру, нельзя будет оперировать с ним в javascript через document.cookie - любыми способами. Это приводит к невозможности чтения этой куки - и, значит, если имеется XSS-уязвимость, то злоумышленник не сможет прочитать ключ сессии, хранящийся в куки, и, значит, атака не будет успешной. Разумеется, такой функционал должен поддерживаться именно браузером - ведь именно он решает, допускать ли чтение куки или нет - поскольку исполнение того же javascript происходит в контексте браузера.
17. likvidator - 27 Июня, 2013 - 11:43:13 - перейти к сообщению
EuGen пишет:
likvidator пишет:
- это так круто,то почему все крупные проекты юзают куки????

Вероятно, Вы не очень хорошо себе представляете механизм работы сессии. На деле, при открытии сессии, ключ доступа к ней отправляется клиенту, но данные сессии хранятся на сервере. Распространённым способом хранения ключа сессии является кука (та самая PHPSESSID как пример).

Теперь вспомните о том, как работает HTTP-протокол. При переходе по ссылке он отправит в Request-запросе куки, относящиеся к домену того хоста, на который делается запрос. И, значит, ключ сессии будет передан таким образом через HTTP-запрос. Если соответствующая сессия открыта на сервере, то есть ключ распознался - клиент получает доступ к данным сессии.

Так вот, собственно, http_only означает, что ключ сессии может быть получен/передан/установлен только через HTTP-протокол, но не через иные средства. То есть, к примеру, нельзя будет оперировать с ним в javascript через document.cookie - любыми способами. Это приводит к невозможности чтения этой куки - и, значит, если имеется XSS-уязвимость, то злоумышленник не сможет прочитать ключ сессии, хранящийся в куки, и, значит, атака не будет успешной. Разумеется, такой функционал должен поддерживаться именно браузером - ведь именно он решает, допускать ли чтение куки или нет - поскольку исполнение того же javascript происходит в контексте браузера.

так тс говорит,если нет xss,то зачем упираться в ограничения браузеров?
18. teddy - 27 Июня, 2013 - 11:44:37 - перейти к сообщению
likvidator
ТС сторонник того, что бы передавать эти данные посредством http. А вы наоборот. Видимо, мы друг друга не понимаем. Вам EuGen уже написал, мне нечего повторять... отпостил он по поводу вашего возражения, при чем тут я ?
19. DelphinPRO - 27 Июня, 2013 - 11:44:59 - перейти к сообщению
teddy пишет:
Как можно запретить на уровне .htaccess доступ к существующим файлам/директориям на сервере?

Если нужен 404 - mod-rewrite вам в помощь. Однако проще заинуть все инклуды в папку на уровень выше DOCUMENT_ROOT и к ним стопудово никто не получит прямого доступа.

teddy пишет:
то передача сессионных куки будет проходить только по http и браузер session_id не получит

Если он не получит session_id - он не сможет оправить этот id серверу, а сервер не сможет опознать какая сессия используется.
session_id передается в любом случае, но с установкой этого параметра идентификатор нельзя будет передать, например, аяксом. Но не все браузеры поддреживают данное ограничение. (Так написано в мануале, если я правильно понял)

teddy пишет:
Если я отфильтрую числовые данные к примеру при помощи abs((int)$_GET['id']) или вместо int, intval, либо если это строка, то mysql_real_escape_string - стоит ли использовать ini_set('session.cookie_httponly', 1); ? Это я спрашиваю потому, что данная фильтрация исключает к примеру XSS атаки

это две совершенно разные атаки - XSS и SQL-injection. Фильтрация данных при записи в базу защищать должна именно от инъекций.

по кэшированию статейка http://www[dot]codenet[dot]ru/webmast/php/caching.php

teddy пишет:
Так же интересует вопрос по поводу подготовленных запросов, зачем они нужны? Какую пользу они могут принести?

Если в течение одного http-запроса происходит несколько одинаковых запросов к БД имеет смысл сделать таие запросы подготовленными.
20. EuGen - 27 Июня, 2013 - 11:47:51 - перейти к сообщению
http_only следует устанавливать. Суть в том, что никогда нельзя быть уверенным в том, что в веб-приложении нет уязвимостей. Дополнительную возможность защиты это обеспечит - по крайней мере для тех браузеров, которые этот флаг поддерживают. Если же браузер не распознаёт такой флаг - то будет попросту обычное поведение. Иными словами, если предположить, что 70% браузеров поддерживают такой режим (цифра взята с потолка, более предметно - здесь), то, устанавливая http_only, можно приобрести дополнительную защиту от XSS в 70% случаев. Это намного лучше, чем 0% случаев, и при этом оно даётся таким простым способом. Поэтому не вижу причины, чтобы не пользоваться такой возможностью.
21. teddy - 27 Июня, 2013 - 11:49:52 - перейти к сообщению
DelphinPRO пишет:
Однако проще заинуть все инклуды в папку на уровень выше DOCUMENT_ROOT и к ним стопудово никто не получит прямого доступа.

Да, я думал об этом, но для личного спокойствия хочу использовать оба варианта Улыбка

DelphinPRO пишет:
Если он не получит session_id - он не сможет оправить этот id серверу, а сервер не сможет опознать какая сессия используется.

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

DelphinPRO пишет:
это две совершенно разные атаки - XSS и SQL-injection. Фильтрация данных при записи в базу защищать должна именно от инъекций.

Да, это я в общем смысле спросил, может нарвусь на какие замечания )

А за статью спасибо, как только дочитаю ссылку от vanicon-а перейду на вашу )
(Добавление)
EuGen
Да, честно говоря, я тоже так думаю... Как раз хотел получить более точный ответ, благодарю что смогли объяснить мне это окончательно в двух словах...
22. LIME - 27 Июня, 2013 - 11:53:04 - перейти к сообщению
я тут увидел аргумент мол привязка к ip бред так как он бывает динамическим
ну надо же...в течении сессии он чтоли динамический???
вполне рабочий способ помешать краже...если конечно крадущий не под тем же ip
23. EuGen - 27 Июня, 2013 - 11:58:08 - перейти к сообщению
LIME пишет:
я тут увидел аргумент мол привязка к ip бред так как он бывает динамическим
ну надо же...в течении сессии он чтоли динамический???
вполне рабочий способ помешать краже...если конечно крадущий не под тем же ip

Нет, это не бред. Это один из хороших способов защитить кратковременный сеанс. Суть в том, что применимость данного подхода ограничивается длительностью сеанса и интервалом смены внешнего адреса. У некоторых ISP действительно бывает так, что адрес меняется с периодичностью порядка нескольких часов. Если продолжительность сеанса работы с веб-приложением превышает данный интервал (это нечасто, но всё же - бывает), то такой способ защиты может вызвать проблемы - от неудобств до серьёзных потерь. На практике описанный случай встречается нечасто, поэтому проверка IP-адреса при работе с авторизованной частью - как правило, хорошая практика. При этом следует помнить, что, так как пользователи часто находятся за NAT, то эта проверка не подойдёт для отсеивания запросов от другого пользователя, расположенного за тем же NAT
24. esterio - 27 Июня, 2013 - 12:05:54 - перейти к сообщению
teddy пишет:
ini_set('session.cookie_httponly', 1);

Не юзаю. Не знаю как поведет себя ajax в таком случае. И еще настройка окружения - ЗАДАЧА СИСАДМИНА
teddy пишет:
Нужно ли ini_set('session.cookie_httponly', 1); указывать во всех файлах, где есть session_start() ? Или только в том файле, где происходит авторизация пользователей?

Правильней всего сделать единую точку входа. В вашем же случае сделайте файл(например bootstrap.php) и подключайте его во всех фалах. А внем уже делайте session_start и прочую инициализацию
teddy пишет:
Если я отфильтрую числовые данные к примеру при помощи abs((int)$_GET['id']) или вместо int, intval,

abs - по модулю. значит он не нужен. Если пользователь указал в строке id=-1 то выдаем 404. У вас же будет контент от id=1 а ето уже не правильно
(int) делает то же самое что и intval. разницы нету. Мне больше нравиться (int)
teddy пишет:
либо если это строка, то mysql_real_escape_string

только при запросах к базе. но никак не такое:
PHP:
скопировать код в буфер обмена
  1. $name = mysql_real_escape_string($_GET['name']);
  2. doSomesingWithName($name);

teddy пишет:
Как можно запретить на уровне .htaccess доступ к существующим файлам/директориям на сервере?


На каталог где лежыт .htaccess
teddy пишет:
Я пробовал делать так: называть файлы на .ht* но в таком случае сервер дает ответ, что такой файл существует, но доступ к нему запрещен

Тут делают по разному.
1. В некому бутсрапе оглашают константу наприммер IN_CMS
а в файле делают следующе

2. описаный выше htaccess
3. index.html - пустой
teddy пишет:
- Как запретить загрузку файлов на сервер, если типы загружаемых файлов не соответствуют требованиям. Например хочу позволять загружать только фотки, достаточно ли проверки на тип загружаемого файла? Если нет, то что нужно делать в этом случае?

http://habrahabr[dot]ru/post/44610/
getimagesize уже лучше чем простая проверка на тип. плюс еще пересохраняют изображение.
teddy пишет:
Как сделать так, что бы кешировалось только то, что было обновлено

Ничего самому делать не надо. Браузер сам знает что и как ему кешировать. Есть только ручное кеширование ajax GET запросов(часто добавляют рандомный параметр) и таких страниц как "новые сообщения" на етом форуме
также рекомендую к ознакомению: http://nomagic[dot]ru/?p=123
teddy пишет:
Кеширование SQL запросов

рекомендую к прочтению
Цитата:
MySQL Оптимизация производительности (Бэрон Шварц, Петр Зайцев, Вадим Ткаченко, Джереми Д. Заводны, Арьен Ленц, Дерек Дж. Бэллинг)

а также здесь http://habrahabr[dot]ru/post/41166/
(Добавление)
vanicon пишет:
Подготовленные выражения нужны для того что бы каждый раз не отправлять sql запрос целиком, а отправлять тока нужные параметры для определенного запроса, так сказать экономия трафика...

И много у Вас таких запроссов подряд. Данная особенность сомнительна в своей полезности, потому как запроссов мног и они все разные. Плюс только то что данные отделены от самого тела запросса и уже не нужно использовать escape_string
vanicon пишет:
Что за чушь, сейчас полно динамических ip, и т .п

likvidator пишет:
По поводу сессий: если вы боитесь кражи SSID,то можно привязывать его к ip

Ну как бы сменил ИП сначит новая сессия. На то она и сессия. Ето ж не "вечные куки"
likvidator пишет:
ini_set('session.cookie_httponly', 1)
- это так круто,то почему все крупные проекты юзают куки????

Походу Вы не знаете назнчение параметра. Он просто запрещает доступ к куке из JS не более
25. teddy - 27 Июня, 2013 - 12:19:27 - перейти к сообщению
esterio
Спасибо за советы и ссылки ) вопросов в принципе нет.. буду читать.

Надеюсь переварю всё сегодня... если нет, тогда держитесь Ха-ха Шутка )

Всем спасибо за помощь и советы Подмигивание
26. armancho7777777 - 27 Июня, 2013 - 12:30:08 - перейти к сообщению
esterio пишет:
Не знаю как поведет себя ajax в таком случае.

Проверил: нормально.
27. EuGen - 27 Июня, 2013 - 12:32:21 - перейти к сообщению
esterio
AJAX - есть HTTP-запрос, а потому будет иметь доступ к таким куки. Строго говоря, конечная реализация зависит от конкретного браузера - и можно себе представить, что этот механизм не сработает, однако же современные браузеры обрабатывают это корректно. То есть, http-only куки будут представлены в XmlHttpRequest запросе к серверу.
28. esterio - 27 Июня, 2013 - 12:36:19 - перейти к сообщению
armancho7777777, EuGen, teddy
Спасибо. Вроде и знал о таком параметре. Но стосовно сессионых кук как-то не думал. Сегодня постиг что-то новое для себя. И теперь с увереностю могу сказать что юзать данный параметр все такы стоит.
29. DelphinPRO - 27 Июня, 2013 - 13:36:36 - перейти к сообщению
esterio пишет:
Не юзаю. Не знаю как поведет себя ajax в таком случае.
нормально. я в своем посте имел ввиду, что нельзя будет спереть куку и отправить ее по-тихому, аяксом например, на сервер злоумышленника.
30. LIME - 27 Июня, 2013 - 13:37:58 - перейти к сообщению
к слову XmlHttpRequest это не js

 

Powered by ExBB FM 1.0 RC1