Разбор переменной в результате SQL - PullRequest
0 голосов
/ 05 апреля 2009

В настоящее время я создаю партнерскую программу (немного похожую на CJ) с Paypal Checkout. Когда люди регистрируются как партнеры (= для того, чтобы продавать свои продукты со своего сайта), они получают 2 php-строки, которые им нужно вставить в свой магазин.

В шапке:

<?php include 'http://www.mydomain.com/tracker/tracker.php?xyz='.$_GET[xyz]; ?> 

В кнопке Paypal:

<input type="text" name="notify_url" 
    value ="http://www.mydomain.com/ipn.php?xyz=<?php echo $_GET[xyz]; ?>" +
    style="width:1px; height:1px; border:0">

Первая часть в основном устанавливает cookie, а вторая пересылает URL-адрес возврата в Paypal, поэтому, когда кто-то решает купить, он возвращается нам. Я не скрывал вторую часть, так как хочу проверить, действительно ли филиалы добавили код.

Все это прекрасно работает в простом рукописном PHP, но все идет не так, когда эти филиалы используют базы данных. Их сценарии, вероятно, будут отображать что-то вроде $ row ['paypal'], которое будет буквально показывать вставленные строки, а не анализировать $ _GET.

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

Ответы [ 3 ]

1 голос
/ 05 апреля 2009

они получают 2 php-строки, которые они должны вставить в свой магазин.

Это невероятно хитро. include () перетаскивает код с указанного URL и выполняет его .

Я бы никогда не позволил партнерской сети добавлять код PHP в мое приложение: это дает внешнему сайту полный контроль над моим приложением и базой данных. Это особенно недопустимо при работе по незашифрованному HTTP: любая атака «человек посередине» может немедленно поставить под угрозу работу сервера. Также, если в вашем tracker.php есть дыра в межсайтовом скриптинге, любой конечный пользователь может полностью скомпрометировать сайт клиента.

Я настоятельно рекомендую найти менее небезопасный способ взаимодействия вашей сети со сторонними приложениями.

Если вы намереваетесь вернуть только HTML, который будет отображаться на последней странице, а не код PHP, вы можете сделать это, используя readfile () , или более обычный метод, который заключается в том, чтобы иметь партнера вставьте клиентскую метку , указанную на вашем сайте.

<?php include 'http://www.mydomain.com/tracker/tracker.php?xyz='.$_GET[xyz]; ?>

Вы также должны использовать urlencode () , чтобы любые специальные URL-символы в параметре были правильно экранированы.

value="http://www.mydomain.com/ipn.php?xyz=<?php echo $_GET[xyz]; ?>"

И здесь, к тому же, вы должны, как всякий раз, когда вы выводите любое текстовое содержимое в HTML, использовать htmlspecialchars () для кодирования специальных символов HTML. В противном случае вы уязвимы для атак межсайтового скриптинга.

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

0 голосов
/ 05 апреля 2009

Спасибо за ваш тщательно продуманный ответ.

Я понимаю вашу точку зрения, что люди могут не захотеть размещать php файлы на своих страницах. Поэтому я удалил часть 1 и изменил ее с помощью URL-адреса перенаправления и файлов cookie. Очевидно, что в реальном скрипте я также защищаю от SQL-инъекций.

Однако моя главная проблема все еще остается. Чтобы отслеживать продажи с помощью Paypal, мне нужно добавить одно поле ввода для кнопок Paypal на веб-сайтах. Это будет выглядеть примерно так:

<input type="text" name="notify_url" value
="http://www.artinthepicture.com/sellmyart/ipn.php?xyz=<?php echo $_GET['xyz'] ?>" style="width:1px; height:1px; border:0">

Никаких проблем с безопасностью там нет, потому что ничего странного не может произойти. Основная проблема заключается в том, что может возникнуть много проблем с кодом от пользователей. Например, если они используют базу данных MySQL для создания своего магазина, у них, вероятно, будет отдельное поле для кнопки PayPal. Теперь, если они повторяют эту кнопку PayPal, дополнительное поле ввода будет выглядеть точно так же, как указано выше. И это проблема, поскольку $ _GET [xyz] не будет анализироваться.

[Редактировать: невозможно комментировать из-за низкого ранга]

0 голосов
/ 05 апреля 2009

Извините, вторая часть должна была быть:

<input type="text" name="notify_url" value ="http://www.mydomain.com/ipn.php?xyz=<?php echo $_GET[xyz]; ?>" style="width:1px; height:1px; border:0">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...