Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Безопасность в PHP (https://javascript.ru/forum/server/27761-bezopasnost-v-php.html)

Diego 23.04.2012 23:25

Безопасность в PHP
 
Уже довольно долго ищу в интернете на эту тему, но в основном пишут статьи про иньекции и xss
Дайте, пожалуйста, ссылки на более полные статьи по безопасности php. Я пишу свою CMS, не хотелось бы чтобы ее взломали в первый же день после запуска сайта :-?

devote 23.04.2012 23:42

пишите аккуратно, проверяйте переменные, используйте встроенные возможности экранирования переменных, в мускуль не суйте значения как это делают многие "`hehe`='$lala'" пишите так как требуется, не юзайте eval и тогда вас сложно будет сломать.

Serg_pnz 23.04.2012 23:45

Принцип один: не доверяйте данным, пришедшим с клиента и будет Вам ЩАСТЬЕ!
Т.е. если ожидается число - intval, строка - хм... ну заслешить кавычки, убрать теги, потереть неожидаемые символы, к примеру $ & #
Не делать eval в скриптах...
Как-то так.

Diego 24.04.2012 00:53

Спасибо за советы! :)

Если с eval в php всё ясно, то почему многие не советуют использовать eval в javascript? Тут уж в любом случае ясно, какие данные придут в скрипт. Конечно если не допускать совсем очевидных ошибок и вставлять в eval вывод нефильтрованых данных от пользователя.

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

devote 24.04.2012 00:59

Цитата:

Сообщение от Diego
то почему многие не советуют использовать eval в javascript?

потому что eval в JavaScript безопасен, но многие этого не понимают, услышали проблемы в серверной стороне и боятся юзать его теперь везде, но он не может навредить данным на сервере, это уже проблемы пользователя а не владельца сайта, если юзер ходит по порно сайтам и ловит всякую тварь, то тут никакое переставание использования eval'a не поможет. А для сервера eval критично, так как это может навредить данным на сервере или серверу.

micscr 24.04.2012 08:27

Что значит не использовать eval на сервере? Для пользовательских данных не использовать, для админских использовать.

Diego, твою цмс вряд ли кто то прям так ринется сразу ломать, только если ты очевидно не наплужил с тем же xss. PDO юзаешь?
Насчет безопасности глянь тут.
еще сразу что в голову пришло:
1) тексты пых скриптов пиши без завершающего ?>
2) csrf.
3) Пользовательские формы помечай маркером, что это форма сайта.
4) Прогугли про общую доступность файлов сессий на виртуальных хостингах, соответственно авторизацию продумай.

B@rmaley.e><e 24.04.2012 09:52

Плюсую про PDO. Все запросы делать только с prepared statements'ами.

Diego 24.04.2012 13:48

PDO не использую, никогда с ним не сталкивался. Посмотрел в вики, через это дополнение проходят все запросы в бд, то есть он автоматически фильтрует все входные данные?

Касательно авторизации - не использую сессии, ставлю две cookie, один с ID пользователя, второй со случайным набором символов, который меняется с каждой авторизацией. Эти символы привязываются к пользователю и его IP, то есть при краже куки злоумышленник всё равно не сможет зайти - его IP отличается от того, что записан в БД. Единственный минус - с изменением IP происходит разлогин, как можно этого избежать? Есть ли другие безопасные способы авторизации?
PS:про этот способ узнал на хабрахабре: http://habrahabr.ru/post/13726/

micscr 24.04.2012 14:35

Цитата:

Сообщение от Diego (Сообщение 170928)
PDO не использую, никогда с ним не сталкивался. Посмотрел в вики, через это дополнение проходят все запросы в бд, то есть он автоматически фильтрует все входные данные?

Он не фильтрует, а сначала подготавливает запрос, в который уже вставятся данные, вне зависимости что это за данные. В отличие от "стандартного" подхода, где формируется весь текст запроса перед выполнением и где надо использовать mysql_real_escape_string

Странная у тебя цмс, где ты сессии не используешь. :-?

devote 24.04.2012 14:52

Цитата:

Сообщение от micscr
1) тексты пых скриптов пиши без завершающего ?>

Уж неужто вычитали где-то что это влияет на безопасность? На возникающие ошибки это конечно влияет когда после закрывающего тега оставишь пробелов, иль еще чего. Но ошибки как правило возникаю одни единственные, невозможность сунуть что-то в заголовки. А на безопасность это ну ни как не влияет, просто нужно юзать нормальные редакторы и быть внимательнее и не разводить мусор в коде. А еще не забывать о том что многие редакторы любят совать BOM который тоже иногда приводит к ошибкам.

Цитата:

Сообщение от micscr
Странная у тебя цмс, где ты сессии не используешь.

да я о том же... чем стандартные PHP'шные сессии не угодили, понять сложно.


Часовой пояс GMT +3, время: 22:17.