2015-01-06 4 views
1

Я сделал интеграцию платежного шлюза на существующем веб-сайте. Платежный шлюз дал мне API, который я использовал и сделал кодирование и сохраненный его в файле PHP pay.phpКак защитить файл php

У меня есть форма оформления заказа на главном сайте и по нажатию представить, он посылает все необходимые данные для pay.php через post а затем этот файл делает все остальное и отправляет данные на платежный шлюз.

Поскольку этот файл pay.php хранит сенситивные данные, я хочу его защитить, чтобы никто другой не мог получить к нему доступ через веб-браузер, например, ввод http://domain.com/pay.php или его возможность загрузить.

Теперь, когда я знаю, что обычно вы не можете просто скачать .php файлов, я видел сайт на днях, который был способен загрузить мой блог Wordpress вместе с файлами .php.

Также каждый раз, когда выполняется файл pay.php, создается ссылка для оплаты, поэтому мне нужно убедиться, что только этот сайт http://www.domain.com способен использовать этот файл и не имеет стороннего участника.

У меня уже есть несколько идей в моей голове, таких как ограничение доступа с использованием удаленного IP и таких, но хотелось бы знать, как наилучшим образом решить проблему.

+2

Поскольку 'pay.php' рассчитывает получить POST, вы не можете запретить браузеру доступ к нему. Вы можете убедиться, что он отправляет сообщение об ошибке, если не все необходимые данные POST присутствуют (например, некоторые действительные данные токена или сессии). Хотя можно проверить '$ _SERVER ['HTTP_REFERER']', чтобы быть уверенным, что он пришел из ожидаемой формы, это совсем не надёжно и сломается, возможно, больше пользователей, чем предотвращает неправильный доступ. –

+0

При использовании PHP никто не может видеть или загружать ваш код через веб-браузер. Пока ваш PHP-файл хранится на сервере с включенным PHP, вам не нужно беспокоиться об этом. – Havenard

+0

Можно ограничить POST с помощью перезаписи URL: http://stackoverflow.com/questions/6335231/prevent-brower-access-to-a-form-handler-php-file –

ответ

2

Чтобы добавить ответ Commusoft и дать небольшую альтернативу.

Этот фрагмент .htaccess отклоняет запросы файла php через браузер и позволяет включать только файл из другого php-файла.

<Files *.php> 
Deny from All 
</Files> 

Поместите это в отдельный каталог, где находится pay.php.

Я думаю, что лучший способ справиться с этой проблемой платежа - превратить pay.php в полный класс и использовать его объектно-ориентированным. Таким образом, вы можете использовать функциональность в любом месте и легко передавать переменные.

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

  • Теперь хакеры, конечно же, желают взломать сайт. И у вас не есть какие-либо данные о том, какие данные будут опубликованы: это зависит от браузера. Иногда хакеры изменить содержание, прежде чем они посылают запрос в надежде, что PHP скрипт подведет каким-то образом и выявить, например, запросов SQL и т.д. первая вещь, таким образом, лучше вам сделать, это отключить сообщения об ошибках:

    error_reporting(0); 
    

    Поскольку хакеры могут найти некоторые предупреждения/ошибки, наиболее полезные для определения лежащего в основе алгоритма и его коррумпирования. Сделав это явно в файле PHP, вы предотвратите это, если вы измените настройки сервера, все внезапные ошибки снова появятся.

  • Кроме того, убедитесь, что пользователь не имеет прямого доступа к конфиденциальным данным. Это может быть достигнуто , вставив конфиденциальные данные в отдельный файл (скажем secure.php) и include_once(), чтобы вы могли прочитать его данные.

  • Как @Havenard и @AlexHowansky говорят, вы также можете хранить такие файлы (secure.php) лучше вне общедоступных каталогов. Например, выше public_html. Это не всегда полностью решает проблему, потому что некоторые веб-серверы чувствительны к URL-инъекции (указав http://www.domain.com/../securefolder/secure.php, вы можете иногда обращаться к файлу над общедоступным каталогом).

  • Как говорит @TomKriek, вы можете также обеспечить additiona защиту «безопасную» папку, вставив .htaccess файл, содержащий следующие строки:

    <Files *.php> 
    Deny from All 
    </Files> 
    

    Это означает, что веб-сервер - еще раз, если правильно настроены - предотвратит доступ пользователей из всех .php файлов в каталоге.

  • Наконец, вы лучше дать файлам соответствующих разрешений: если PHP двигатель работает как тот же пользователь как владелец файлов, вы можете дать ему 600права доступа (chmod 600 secure.php) или 640 в случае, PHP-движок работает на другом пользователе, чем владелец файла, но в той же группе пользователей или в худшем случае 644, так что хакер не может изменить файл (или, по крайней мере, не должен). Вы также можете изменить владельца файла на www-data, запустив chown www-data secure.php, чтобы владелец был веб-сервером, и вы можете сделать его более жесткими. Эмпирическое правило всегда равно , чтобы дать ему наименьшие права доступа для правильной работы.

  • Вы также можете сделать файлы только для чтения, когда они реализуются путем установления прав на 400, 440 или худшем случае 444. В этом случае, по крайней мере, хакер не может ввести свой банковский счет в качестве получателя платежа;).

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

+0

Право доступа не помешает серверу прочитать файл и передать его пользователю, так как сервер обращается к файлу с использованием тех же прав, что и скрипты PHP. Если вы хотите запретить чтение файла в случае неправильной конфигурации, вы должны сохранить его за пределами опубликованной папки. – Havenard

+0

@ Havenard: на самом деле они ** делают ** предотвращают его передачу пользователю (учитывая, что сервер снова настроен правильно), вы можете проверить это самостоятельно (защищая файл '.txt' или что-то в этом роде). Не для PHP-движка, поскольку такой движок обычно работает с другим пользователем. –

+0

Это нелогично, и даже если вы правы, вы снова полагаетесь на правильно настроенный сервер. – Havenard

1
  1. Вы можете выполнять только POST-запросы в этом файле (также вы должны проверить даже POST-запросы). Запрос GET не вернет ничего или ошибку.
  2. Обычно вы не можете скачать php-файл простым способом. Для этого нужны некоторые дыры в безопасности сайта.
  3. Вы можете направлять весь запрос в один файл php. Обычно это index.php. Постарайтесь посмотреть, как его настроить через .htaccess. И пользователи не будут знать о ваших реальных файлах PHP.
  4. Вы можете защитить свои файлы через разрешения, если это необходимо.
+0

Путем перенаправления всех запросов на 'index.php' может возникнуть проблема, что если файл просочился, весь исходный код публикуется. Таким образом, разделение файлов имеет свои достоинства. –

Смежные вопросы