ďťż
Podstrony
|
telcocafeCzy można stworzyć aplikacje, która nie będzie czyściła danych przychodzących przy pomocy np strip_tags, mysql_real_escape_string etc a jednocześnie będzie bezpieczna? Odpowiedz uzasadnij (jeśli wcześniej nikt nie napisał tego samego ;-))Użytkownik Bełdzio edytował ten post 24 lipiec 2007, 11:17 Ja bym powiedział, że można sprawdzając na wybiegu czy np. user nie zastosował znaków, które mogą popsuć nasz skrypt. Np szukając w łańcuchu, który przesłał user, znaku " ' ". Jeżeli jest to wywalamy błąd inaczej puszczamy dalej. Akurat to mi przyszło do głowy - jak coś jeszcze wykombinuje to dodam ;) hmmm nie wiem jak to opisać dokładnie :-) chodzi mi o cos takiego ze pobieramy dane i na zywca wrzucamy je do bazy hmm nie wiem jak ktos cos rozumie to piscie ;-) //edyta może tak :-) nic nie kasujemy, nic nie blokujemy - pozwalamy na SQL Injection, a mimo to jestesmy bezpieczni :) możliwe? Użytkownik Bełdzio edytował ten post 23 lipiec 2007, 23:05 może tak :-) nic nie kasujemy, nic nie blokujemy - pozwalamy na SQL Injection, a mimo to jestesmy bezpieczni :) możliwe? tak, ponieważ mysql_query pozwala na wykonanie tylko 1 zapytania. spotkałem się ze strona gdzie jest takie zapytanie: "SELECT * FROM users WHERE user_id='".$_GET['id']."' OR user_name='".$_GET['id']."'" wszystko tu wchodzi ładnie czarno na Białym, lecz nie da się w nijaki sposób tego wykorzystać :< stronka do testów dostępna tutaj jest coś takiego jak UNION SLECT :-) czyli np SELECT * FROM users WHERE id = $_GET['id'] => SELECT * FROM users WHERE id = 5 UNION SELECT haslo FROM users WHERE login = "admin"; :) http://hmt.pl/users.php?id=731231231231...0user_id='1 <- union select nie znam struktury bazy wiec działam tylko na id :) moze byc? Użytkownik Bełdzio edytował ten post 23 lipiec 2007, 23:51 Przy wstawianiu lub aktualizacji rekordów w bazie warto wykorzystać mechanizm podpinania. Wtedy tylko musimy usunąć znaki <, >, &, itd., gdy jest potrzeba. /*Plik edycji bannerów*/ #Dane $q->bindValue(':gid',$_POST['b_gid'],1); //1 = INT $q->bindValue(':name',Clean($_POST['b_n'])); $q->bindValue(':ison',$_POST['b_on'],1); $q->bindValue(':code',$_POST['b_c']); if($q->execute()) Info($lang['saved']); /*Funkcja Clean() w kernel.php*/ #Encje + trim() function Clean($val,$max=0) { if($max) $val=substr($val,0,$max); return trim(htmlspecialchars($val)); } Gdy wstawiamy dane bezpośrednio do bazy danych: ID=(int)$_GET['id']; W F3Site jeżeli zmienne GET - ID oraz PAGE - istnieją i mają nienumeryczną wartość, skrypt przerywa dalsze wykonywanie się już w kernel.php. Inne trzeba sprawdzać, używając np. Clean() bądź rzutując - (int). Można przeszukiwać też zmienne GET w poszukiwaniu znaczników <script>, <object>... jednak powinno się raczej uniemożliwiać wstawianie HTML-a, o ile to możliwe. Użytkownik Ferrari edytował ten post 24 lipiec 2007, 07:45 a co ja napisałem? :-) nic nie kasujemy, nic nie blokujemy czyli nic nie zmieniamy :-) jednak powinno się raczej uniemożliwiać wstawianie HTML-a, o ile to możliwe. Czy można stworzyć aplikacje, która nie będzie czyściła danych przychodzących przy pomocy np strip_tags, mysql_real_escape_string etc a jednocześnie będzie bezpiec zna? Odpowiedz uzasadnij (jeśli wcześniej nikt nie napisał tego samego ;-)) Każda aplikacja jest bezpieczna... niektóre tylko mniej. Przy pobieraniu jeśli nie filtrujemy danych strona nadal możę być bezpieczna. $page->query('SELECT * FROM '.$db_prefix.'news WHERE author = " '.$_GET['author'].' " '); /index.php?author=1%20union%20select%20*%20from%20news%20where%201=1 Strona nie zwróciła mi w wyniku ani jednego rekordu. "...która nie będzie czyściła danych przychodzących..." -> mozna więc czyścić dane zanim zostaną dodane do bazy ;-) -> np. kodem z jednego z numerów eksperta: foreach ($_POST as $name => $value) { $_POST[$name] = funkcja_czyszczaca($value); } IMO nie ma skryptu który jest w 100% bezpieczny ;-) Pozatym... kto pisząc strone ( poza początkującymi którzy nie są w temacie ) nie zabezpieczył by swojej strony ? :) Wiele o błędach w zabezpieczeniach można przeczytać na http://ha.ckers.org/xss.html Użytkownik fenekpl edytował ten post 24 lipiec 2007, 09:21 http://ha.ckers.org/xss.html Hoho,aż się zacząłem bać :P To już wiem,że choć troszkę bezpieczniej jest używać bbcode :D A co do tematu . . . Jeżeli przedstawiłeś takie argumenty to jesteśmy pewni,że nie da się :P Chyba że dane są przekazywane metodą post wtedy już jest problem typów danych. Metoda post wrzuca backslashe przed apostrofy i cudzysłowy . . . I jak stwierdził fenekpl , kto chociaż nie próbuje zabezpieczyć pisanego skryptu,chociaż nie do końca wszystko można zrobić do końca na bank bezpieczne,jak pokazują na stronie . . . Przy pobieraniu jeśli nie filtrujemy danych strona nadal możę być bezpieczna. $page->query('SELECT * FROM '.$db_prefix.'news WHERE author = " '.$_GET['author'].' " '); /index.php?author=1%20union%20select%20*%20from%20news%20where%201=1 Strona nie zwróciła mi w wyniku ani jednego rekordu. bo popełniłeś błąd :-) foreach ($_POST as $name => $value) {<BR>     $_POST[$name] = funkcja_czyszczaca($value);<BR> } czyścisz dane, a nie można :-) Pozatym... kto pisząc strone ( poza początkującymi którzy nie są w temacie ) nie zabezpieczył by swojej strony ? :) ogólnie ma być filtracja, mój chory pomysł ma inne zadanie, napisałem o braku filtracji dlatego, że nawet jak jej nie będzie to chory pomysł  ma nas bronić - znowu bełkocze :D Wiele o błędach w zabezpieczeniach można przeczytać na http://ha.ckers.org/xss.html znam dobrze tą stronę :) A co do tematu . . . Jeżeli przedstawiłeś takie argumenty to jesteśmy pewni,że nie da się Chyba że dane są przekazywane metodą post wtedy już jest problem typów danych. Metoda post wrzuca backslashe przed apostrofy i cudzysłowy . . . I jak stwierdził fenekpl , kto chociaż nie próbuje zabezpieczyć pisanego skryptu,chociaż nie do końca wszystko można zrobić do końca na bank bezpieczne,jak pokazują na stronie . . . ad1. właśnie mój chory pomysł przewiduje coś innego ad2. w php nie ma typów prostych jeśli o taki typy Ci chodzilo :-) ad3. dodawane są tylko wtedy gdy jest to włączone - w demie mam wyłączone ad4. e tam :-) wsio da się zrobić w tym zabezpieczyć:-) Użytkownik Bełdzio edytował ten post 24 lipiec 2007, 11:10 jest coś takiego jak UNION SLECT :-) czyli np SELECT * FROM users WHERE id = $_GET['id'] => SELECT * FROM users WHERE id = 5 UNION SELECT haslo FROM users WHERE login = "admin"; :) http://hmt.pl/users.php?id=731231231231...0user_id='1 <- union select nie znam struktury bazy wiec działam tylko na id :) moze byc? Dzięki za informację o dziurze, już poprawiona. Zaznaczam, że całą stronę od deski do deski pisałem sam, włącznie z forum, więc drobne błędy się wkradają czasem. Cały myk polegał na tym, że poza id uzytkownika, można było tez podać jego nick, więc uzycie intval(); odpadało, ale jakimś cudem wcale nie było tam nic filtrowane :blink: No cóż, tak to jest, jak się pisze wielki portal samemu i nikt nas nie sprawdza, muszę się lepiej przyjrzeć stronie, bo akurat pracuję nad nową poprawioną wersją portalu. Ahh, te błędy :P Hm... pewnie skrypt może być bezpieczny :) Wszystko zależy od podejścia i pomysłu. powiedział Kodie po zapoznaniu się z Calypso ;-) Użytkownik Bełdzio edytował ten post 24 lipiec 2007, 12:27 moze nie do dyskusji ale sonda jest bezsensowna bo odpowiedzi brzmia NIE - bezpieczne programy czy bazy danych to takie ktore znajduje sie na wylaczonym komputerze bez fizycznego dostepu taka prawda niestety @CJ_HNO bezsensowny to jest Twój post bo 1. nic nie wnosi do temat 2. jakos nie widze potwierdzenia Twojego stwierdzenia... Bełdzio, czy ty masz jakiegoś asa w rękawie ? :) w sumie to CJ_HNO ma racje -> bezpieczne będzie tylko jeśli strona znajduje sie na wyłączonym pc. Użytkownik fenekpl edytował ten post 24 lipiec 2007, 17:13 coś tam mam :-), a to z wyłączonym pc to bulshit :) a nie prościej pobrać na początku wszystkie dane z danej tabeli a następnie wyświetlić potrzebne za pomocą if 'a. Wtedy wszystkie dane przychodzące nie będą mieć kontaktu z zapytaniem do bazy. Coś takiego $result = $page->query('SELECT * FROM news'); if ($db->num_rows($result)) { while ($row = $db->fetch_array($result)) { if ($row['id_news'] == $_GET['id'] { echo "bleblebelbble"; } } Można także zamiast standardowego przesyłania metodą GET czyli (index.php?modules=news&id=1&action=view) użyć kombinacji ' / . żeby adres wyglądał mniej wiecej tak (index.php/news'1.view) a następnie w skrypcie obciąć index.php żeby został sam ciąg /news'1.view . A potem użyć wyrażeń... zrób to na bazie, która ma kilka / kilkanaście tyś rekordów :-) pobawicie się prostym demem :-) http://www.beldzio.com/calypso/ http://www.beldzio.c...lypso/index.txt żeby złamać system trzeba się do niego zalogować tudzież opisać zabezpieczenie :-) najlepiej na pw zeby nie psuc zabawy innym wiem wiem pierwsze rozwiązanie jest mało wydajne ale za to skuteczne (i chyba o to chodziło w tym temacie więc przymrużmy oko na przypadki kiedy są pobierane dane z parotysięcznej bazy a skrypt wykonuje się dość długo). A co z drugim sposobem :> "a następnie w skrypcie obciąć" <- ile razy mam pisac ze nie modyfikujemy danych wejsciowych? demoBanan v1 ;-) "Niestety" moja metoda została już naprawiona ;> poprawiona, poprawiona :) bo to nie był hack metody tylko jej obejście :) ale dał radę :) tak to jest jak sie pisze skrypt 30 min :P Nav jak na razie rox ;] Rozumiem że na podpowiedź rzędu "czy tabela users zawiera jakieś przemilczane kolumny, a jeśli tak to jakie" nie możemy liczyć? ;] masz możliwość wykonania SQL Injection :) sprawdź sam :) Bełdzio: dlatego napisalem na samym poczatku posta ze nie do dyskusji aczkolwiek przekazalem prawdziwy fakt. Aby to udowodnic: czy wiesz ze istnieja rozne klasy bezpieczenstwa systemow operacyjnych? jest ich kilka tylko najwyzsze sa dopuszczone do uzycia np. w wojsku, ale najlepsze jest to ze punktem odniesienia jest klasa ktora reprezentuje wlasnie komputer odciety od swiata i to nie jest zart czy glupota tylko od tego zaczyna sie skala bo zaden inny komputer z jakimkolwiek systemem czy programami NIGDY nie bedzie bardziej bezpieczny bo ZAWSZE znajdzie sie jakas luka problem w tym kto pierwszy ja znajdzie - autor czy niedobry czlowiek ;-) mam nadzieje ze wystarczajaco rozwinalem moja mysl to tyle. Rozumiem że na podpowiedź rzędu "czy tabela users zawiera jakieś przemilczane kolumny, a jeśli tak to jakie" nie możemy liczyć? ;] Lepsza by była podpowiedź dotycząca zawartości pliku calypso.php. Coś mi się wydaje, że "to coś" modyfikuje/zabezpiecza cookies, bo o dziwo pierwsze zapytanie działa z tymi danymi, a drugie już nie. Użytkownik kiperoman edytował ten post 26 lipiec 2007, 12:12 już mówiłem, że nie ma żadnej modyfikacji danych, skoro coś nie działa, to znaczy że coś robisz źle :) Hehe,chłopaki. Ruszcie szare komórki :P A jeżeli nie to polecam lekturę :D Mam nadzieję,że Bełdzio nie będzie zły bo tam jest wszystko :P Tylko trzeba umieć szukać,panowie ;) nic tam nie ma ;-) btw jeśli zalogowałeś się to podeślij dane do logowania na pw A tak,nie ma ale jest o XSS,a mój mózg działa tak niestabilnie,że pomylił to ze SQL Injection i udało mi się :P Chociaż sam nie wiem jak -.- huh :D pewna informacj :) login test się nie liczy - dane te były podane publicznie |
|||
Sitedesign by AltusUmbrae. |