1. PHP / Говнокод #13751

    +145

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    function curPageURL() {
    	$pageURL = 'http';
    	if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    	$pageURL .= "://";
    
    	if ($_SERVER["SERVER_PORT"] != "80") {
    		$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    	} else {
    		$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    	}
    
    	$pos = strripos($pageURL, "/");
    	if ($pos !== false) {
    		$pageURL = substr($pageURL, 0, $pos+1);
    	}
    
    	return $pageURL;
    }

    Эпическая функция предназначение неизвестно.

    Запостил: good_web_master, 07 Сентября 2013

    Комментарии (16) RSS

    • Выдаёт URL?
      ваш кэп
      Ответить
    • 1)
      $pos = strripos($pageURL, "/");
      if ($pos !== false)
      $pos всегда будет число так как на 4 строке $pageURL .= "://";
      Ответить
    • 2) Мы получаем уязвимость для XSS атак через $_SERVER["REQUEST_URI"], так как значение, возвращаемое функцией вставляется в шаблон.
      Ответить
      • Хм, а как тут замутить XSS? Протокол и хост намертво зафиксированы. В $_SERVER["REQUEST_URI"] валидный путь, т.к. в противном случае запрос или HTTP сервак бы забрил, или роутер (если роутинг сделан на уровне PHP).

        Т.е. произвольную ссылку тут, имхо, не получится сформировать. Получится только текущий урл с подрезанным хвостом.

        Или я туплю?
        Ответить
        • Может что-нибудь в духе http://govnokod.ru/13751?foo=%3Cscript%3Ealert%28%27XSS%27% 29%3B%3C%2Fscript%3E
          Ответить
          • Если не туплю, то оно обрежется до "http://govnokod.ru/", да и все.
            Ответить
            • http://govnokod.ru/13751?foo=/%3Cscript%3Ealert%28%27XSS%27%29%3B%3C%2 Fscript%3E
              А так?
              Ответить
              • Тьфу, перепутал порядок. Предназначение действительно неизвестно
                Ответить
                • Если дальнейшая работа со строкой не настолько упорота, чтобы снять со ссылки urlencode и подставить ее в таком виде в шаблон, то, имхо, ничего плохого и не получится.
                  Ответить
              • http://govnokod.ru/13751?foo=/ :)

                / надо куда-нибудь в конец.
                Ответить
                • http://govnokod.ru/13751?foo=%3Cscript%3Ealert%28%27XSS%27% 29%3B%3C%2Fscript%3E/
                  Попытка №3 :)
                  Ответить
                  • Ну эта ссылка и уйдет на выхлоп. Выполняться то ниче не будет :)
                    Ответить
                  • Ну разве что пойти ва-банк, и не делать urlencode: http://govnokod.ru/13751?foo="><script>alert("XSS");</script>/
                    Ответить
                    • Браузер все равно ж заэскейпит.
                      Ответить
                      • Потестил, ну так то работает, если напрямую запрос послать. Но в итоге бяку подсунул самому себе, что бессмысленно ;)

                        > Браузер все равно ж заэскейпит.
                        Угу, поэтому подбросить эту ссылку кому-нибудь не удастся.
                        Ответить
                      • А вот кстати, кажется придумал в каком случае можно замутить атаку. Если автор все-таки упоролся, и хочет красиво показывать ссылочки (чтобы русские буквы например были просто буквами, а не процентиками):
                        $url = curPageUrl();
                        $pretty_url = urldecode($url);
                        echo "<a href=\"$url\">$pretty_url</a>";
                        Но я х.з., за каким хреном кому-то понадобится показывать локальные ссылки в таком виде...
                        Ответить

    Добавить комментарий