Автор Тема: php whois secure  (Прочетена 18923 пъти)

v01d

  • Напреднали
  • *****
  • Публикации: 39
  • Distribution: Slackware
  • Window Manager: XFCE 4.6rc1
    • Профил
php whois secure
« -: Jun 27, 2009, 14:17 »
Как може един прост код като този по-долу да се защити от сорта на
http://buggy-script.com/whois.php?domain=alabala.net;cat /etc/passwd
?
Код:
<?php

$domain=$_GET['domain'];

echo "<pre>";

system("whois $domain");

echo "</pre>";
?>
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: php whois secure
« Отговор #1 -: Jun 27, 2009, 14:55 »
Например
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $domain=urlencode($_GET['domain']);
  4.  
  5. echo "<pre>";
  6.  
  7. system("whois $domain");
  8.  
  9. echo "</pre>";
  10. ?>
Въпрос на въображение ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

ANTIADMIN

  • Напреднали
  • *****
  • Публикации: 660
  • Distribution: Windows XP Pro latest updates
  • ANTIADMIN
    • Профил
Re: php whois secure
« Отговор #2 -: Jun 27, 2009, 15:44 »
Не разбирам много от пхп, но това би трябвало да работи:
system("whois $domain");
то
system("whois ", $domain);
Естествено трябва да се проверяват и други работи, например енв променливите, url,  големината на инф., с 2 думи всичко, което идва отвън :) Нека капацитетите да се изкажат, без да спамят.
p.s. в перл нещата са по-лесни :(
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Re: php whois secure
« Отговор #3 -: Jun 27, 2009, 16:21 »
p.s. в перл нещата са по-лесни :(
Езика няма значение.
Направи си един регулярен израз, с който да тестваш входните данни за непозволени символи. В случая всичко което може да се съдържа в $домейн са букви, цифри, точка, тире и долно тире.
php.net/preg_match
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: php whois secure
« Отговор #4 -: Jun 27, 2009, 19:06 »
p.s. в перл нещата са по-лесни :(
Езика няма значение.
Направи си един регулярен израз, с който да тестваш входните данни за непозволени символи. В случая всичко което може да се съдържа в $домейн са букви, цифри, точка, тире и долно тире.
php.net/preg_match
Долно тире? Забранено е използването му в имена на хостове и домейни!!!
Активен

0x2B|~0x2B

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: php whois secure
« Отговор #5 -: Jun 27, 2009, 19:29 »
Perl-аджиите нека си трошат главите с регулярни изрази. PHP си има escapeshellcmd() :)
Активен

"Knowledge is power" - France is Bacon

laker

  • Гост
Re: php whois secure
« Отговор #6 -: Jun 27, 2009, 19:38 »
Perl-аджиите нека си трошат главите с регулярни изрази. PHP си има escapeshellcmd() :)

$ perl -e '@args=qw(echo Hello;echo World);system(@args);'
Hello;echo World

Няма нужда :)
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: php whois secure
« Отговор #7 -: Jun 27, 2009, 19:56 »
PHP си има escapeshellcmd()
Моето предложение с urlencode() е с 5 байта по-кратко :P Но твоето пък може да излезе с някоя и друга микросекунда по-бързо. Както и да е. Това са двата най-чисти варианта. Preg_match е бавен, дълъг и се рискува пропускане на вариант. Не е полезен в този случай.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: php whois secure
« Отговор #8 -: Jun 27, 2009, 21:14 »
Опа, какво си набарах... :) Нещо почвам да губя доверие към escapeshellcmd().
Да разгледаме следния сценарий. Скриптът за whois проверката се изписва с escapeshellcmd(). Допълнително, в скрипта е добавен такъв код за по-нагледно показване на клиента какво търси (част от украшенията на сайта)
Код
GeSHi (PHP):
  1. ...
  2. echo 'Информация за домейна <b>'.$domain.'</b><br><br>';
  3. ...
И скриптът се зареди по следния начин
Цитат
http://domain.com/whois.php?domain=<a href="proba">proba</a>
Някой сеща ли се как мога да използвам с користни цели това позволение на escapeshellcmd()? :)

Жокер: Не казвам, че задължително ще използвам тага <a>, макар че и той може да свърши някаква работа. И не става дума за манипулиране на сървъра, а за манипулиране на клиента, което може да ми помогне за манипулиране рейтинга на сайта, на който се намира скриптът.

P.S.0: Един вид манипулация на клиента може да се направи и с urlencode(), но вариантите се свеждат просто до написан текст и то не в прегледен вид.

P.S.1: Ако решите да отговаряте на задачата, гледайте да не давате цялостни завършени указания за манипулацията, тъй като ще влезете в нарушение на т.7 от правилата на форума.

edit: Помогнете и за намиране на по-сносна манипулация при използването на urlencode(). Невъзможни неща няма, а така ми седи някак незавършено :)
« Последна редакция: Jun 27, 2009, 21:23 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: php whois secure
« Отговор #9 -: Jun 27, 2009, 21:53 »
Идеята на escapeshellcmd е да филтрира кофти metacharacters, които евентуално биха отклонили изпълнението при викане на system() и компания. За "справяне" с HTML код е по-добре да се използва htmlentities(). И все пак не съм много убеден, че е практично по гореописаният начин да се осъществяват XSS атаки (за което предполагам намекваш). ОК, няма проблеми < да се escape-ва и да стане \<, обаче със затварящият тага > се чупят нещата.

Но иначе е възможно при дадени обстоятелства, примерно имаме:

Цитат
echo "Информация за домейна <a href='$domain'>$domain</b><br><br>";

тогава да речем можем да се пробваме да му предадем

Код:
' onmouseover=alert(/blabla/.source);

и вероятно ще мине номера.

Иначе да, urlencode е по-идейно.
Активен

"Knowledge is power" - France is Bacon

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: php whois secure
« Отговор #10 -: Jun 27, 2009, 22:48 »
Точно за XSS атаки става дума [_]3 Естествено, няма да мине каквато и да е XSS атака, но с малко въображение могат да се постигнат добри резултати. Javascript, подобен на onmouseover, го изключваме като вариант, тъй като escapeshellcmd() ще сложи наклонени черти пред скобите, символа точка и запетая, и единичната кавичка в началото (тъй като е сама). При това се надяваме програмистът да не е сложил допълнителни обработки на съдържанието на променливата $domain, като htmlentities(), urlencode(), preg_match(), addslashes() и други.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

v01d

  • Напреднали
  • *****
  • Публикации: 39
  • Distribution: Slackware
  • Window Manager: XFCE 4.6rc1
    • Профил
Re: php whois secure
« Отговор #11 -: Jun 29, 2009, 00:18 »
Благодаря на всички за полезните отговори.
Активен