PHP Security - получить переменные, URL безопасно? - PullRequest
1 голос
/ 13 сентября 2011

Я создаю очень простой симулятор iPhone, и я хочу просто разместить его в одном месте, а затем на любом сайте, который у нас есть, и мы хотим его разместить, мы бы просто назвали его, используя: 1002 *

Есть ли что-то, на что мне нужно обратить внимание, это может быть небезопасно? База данных не задействована или что-то еще, но на случай, если кто-то захочет возиться и добавить что-то в URL, что я могу сделать, чтобы сделать это немного более безопасным?

Вот мой код:

<?php
    if(isset($_GET['url'])) {
        $url = $_GET['url'];
        ?>

        <!doctype html>
        <html lang="en">
            <head>
                <meta charset="utf-8">
                <title>iPhone Test</title>
                <style type="text/css">
                #iphone { 
                    background:url(iPhone.png) no-repeat; 
                    width:368px; height:706px; 
                    position:relative; 
                    overflow:hidden;  
                }
                #iphone iframe {
                    position:absolute; 
                    left:30px; 
                    top:143px; 
                    border:0;overflow:hidden; 
                }
                </style>
            </head>
            <body>
                <div id="iphone">
                <iframe src="<?=$url;?>" width="307" height="443"><p>Your Browser does not support iFrames.</p></iframe>
                </div>
            </body>
        </html>
        <?php
    }
?>

Редактировать: Спасибо за вашу помощь. Я провел некоторое исследование, и вот что у меня есть:

<?php
include_once 'filter.php';
$filter = new InputFilter();   

if(isset($_GET['url'])) {
if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
    $url = $filter->process($_GET['url']);
?>

Источник: http://oozman.com/php-tutorials/avoid-cross-site-scripting-attacks-in-php/

Класс: http://www.phpclasses.org/browse/file/8941.html

Что вы думаете?

Ответы [ 6 ]

4 голосов
/ 13 сентября 2011

Вы должны использовать PHP filter_var, чтобы проверить его действительность ...

    if (isset($_GET['url'])) {
        if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
            $url = $_GET['url'];
        }
    }
3 голосов
/ 13 сентября 2011

Если эта страница доступна для всех, тогда вы открываете себя для перенаправлений XSS и Phishing.Например, попробуйте добавить это к своим параметрам URL:

?url="></iframe><script>alert(123)</script>

В Firefox 6.02, который отключает оповещение.Это означает, что любой JS может быть запущен и использован для перенаправления пользователей, которые думают, что они посещают ваш сайт.Или его можно использовать для кражи файлов cookie, которые не помечены как HTTPOnly.

Это может быть смягчено путем кодирования атрибутов HTML.Что описано здесь из OWASP:

За исключением буквенно-цифровых символов, экранируйте все символы со значениями ASCII меньше 256 с помощью & # xHH;формат (или именованный объект, если имеется), чтобы предотвратить переключение атрибута.Причина, по которой это правило является настолько широким, заключается в том, что разработчики часто оставляют атрибуты без кавычек.Правильно заключенные в кавычки атрибуты можно экранировать только с помощью соответствующей кавычки.Атрибуты без кавычек могут быть разбиты множеством символов, включая [пробел]% * +, - /;<=> ^ и |.

Ссылка: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.232_-_Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes

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

?url=http://myevilsite.com/redirect.php

И эта страница перенаправляет пользователя:

window.top.location.href = "http://www.site.com"; 

единственное, что вы можете с этим сделать, - это использовать белый список допустимых URL.

2 голосов
/ 13 сентября 2011

Метод запроса не предоставляет каких-либо функций безопасности, см. Этот ответ

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

Здесь вы можете увидеть некоторые примеры этого :

<IFRAME SRC="javascript:alert('XSS');"></IFRAME>

<iframe src=http://ha.ckers.org/scriptlet.html"></IFRAME>

Вы также можете попросить кого-то привести что-то опубликовать ...

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

Просто остановитесь, прежде чем идти дальше, вам нужно знать, что вы делаете, и выначните с чтения .

1 голос
/ 13 сентября 2011

Вот список проблем безопасности, связанных с этим ..

Сводка безопасности IFrames

Среда, 24 октября 2007 г. Я решил собрать различные доказательства концепций, которые ясделали и суммируйте, почему iframes представляют собой угрозу безопасности.Вот основные причины: -

  1. Использование междоменных доменов в браузере

Описание: - Поскольку вы можете встроить другой веб-сайт в свою страницу, вы можете использовать эту страницу и выполнятьдействия от имени этого пользователя и выполнение каких-либо действий на выбранном веб-сайте.

Подтверждение концепции: - Safari beta 3.03, нулевой день

  1. XSS / CSRF-рефлексия

Описание: - Используя встроенные в скомпрометированный сайт встроенные фреймы, злоумышленник может отражать атаки на другие серверы, что затрудняет отслеживание атак и позволяет сосредоточиться на проведении атак.

Подтверждение концепции: - Нет доступных дляэтот тип атаки, так как было бы трудно показать метод без фактического проведения атаки.

  1. CSS и iframes могут сканировать вашу локальную сеть из Интернета!

Описание:- Используя возможности CSS и используя iframes, чтобы проверить, существует ли IP-адрес по умолчанию, можно довольно легко получить диапазон сетевых адресов.При условии, что сетевое устройство использует стандартный IP-адрес по умолчанию.

Подтверждение концепции: - Сканер локальной сети CSS

  1. Сканирование локальной сети с использованием Javascript и iframes

Описание: - Используя метод, аналогичный описанному выше, можно получить информацию о вашей локальной сети с помощью Javascript.

Подтверждение концепции: - Сканер Javascript LAN

  1. Наложения CSS iframe

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

Подтверждение концепции: - Эксплойт Verisign OpenID (теперь исправлено)

  1. Перенаправление URL

Описание: - Iframes также позволяют вам выполнять перенаправление, чтобы вы могли иметь доступ к URL, которые обычно не были бы доступны.В восхитительном примере POC перенаправляет из вкусного / домашнего в закладки вашего аккаунта, а затем использует наложения CSS для отображения вашей первой закладки.Firefox и восхитительный аккаунт требуются для POC.

Подтверждение концепции: - Восхитительное CSS-оверлей / перенаправление

Оригинал здесь

Вы можете сделать это намного безопаснее, действуя как прокси-сервер, загрузив запрошенный URL в PHP, убрав все из HTML (javascript и т. Д.), А затем отобразив его в iframe, указанном на веб-странице вашего сервера

1 голос
/ 13 сентября 2011

Вы уязвимы для межсайтовых сценариев .

Все, что нужно сделать, это включить "></iframe><script>EEEEVVvvvillll!!!! в URL-адрес или использовать не HTTP / HTTPS URI.

0 голосов
/ 30 марта 2018

Просто используйте strip_tags(), чтобы аннулировать любую злую запись сценария:

$url = strip_tags($_GET['url'])
...