Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [www/skrypt] Ocena skryptu komentarzy
Forum PHP.pl > Inne > Oceny
Stron: 1, 2
materkamil
Po ostatnich cudach z skryptem uploadu zauważyłem że robię czasem głupie błędy. Dlatego też chciałbym abyście sprawdzili pod względem bezpieczeństwa napisany przeze mnie OD PODSTAW skrypt komentarzy z bazą danych MySQL. Cały skrypt napisałem na własnej klawiaturze więc nie wiem czy jest bezpieczny. Chodzi o to czy nie jest podatny na podstawowe ataki, chociaż raczej wszystko zabezpieczyłem.

I jeszcze przy okazji dodałem 7 część kursu PHP a dokładniej wprowadzeni do SQL. Nagrałem już również część 5 i 6 ale na razie nie mam możliwości jest zauploadować i pojawi się nie wcześniej niż w sobotę.

Oto adres:
http://materdefense.ugu.pl/kursphp.php

Tu dodaje jeszcze adres strony głównej:
http://materdefense.ugu.pl

Komentarze na dole.

PS: Dodam że polskie znaki nie działają, ale rozwiązuje ten problem już w innym wątku.
lobopol
Błagam Ciebie, nie rób kursu php dopóki nie będziesz miał odpowiedniej wiedzy. Przejrzałem kilka podstron nie znalazłem tego twojego skryptu komentarzy, a jedynie mnóstwo literówek i błędów w twoich "lekcjach".
materkamil
Skrypt jest na dole tej strony:
http://materdefense.ugu.pl/kursphp.php

Ten kurs PHP to jedynie podstawy w moim wydaniu. Wszystko jest dobrze i ok. Wszystko działa i wszystko jest ok. Znajdziesz konkretny błąd, napisz, a nie takie coś
!*!
SQL != MySQL
PHP != SQL
I gdzie ten kurs PHP? Pokazujesz coś w konsoli której nie widać, ale powiedzmy że ktoś Cie słucha...

1. Początkujący nie użyją konsoli, bo połowy nie rozumieją
2. Zaawansowani programiści nie użyją konsoli bo mają własne narzędzia, a jak nie, to i tak znają polecenia na pamięć, a nawet je sobie zbindują. I gdzie ten skrypt komentarzy jest?

materkamil
Cytat
Pokazujesz coś w konsoli której nie widać,


Od tego jest jakość HD w rozdzielczości mojego monitora 1366x768 więc odtwarzany na laptopie idealnie pasuje na cały ekran.

Cytat
PHP != SQL


Skąd do wymyśliłeś? Przecież w ramach kursu PHP jest wprowadzenie do SQL, jak będziesz pisał funkcje mysql_query?

Cytat
1. Początkujący nie użyją konsoli, bo połowy nie rozumieją


I po to jest ten kurs! Żeby rozumieli

Cytat
Zaawansowani programiści nie użyją konsoli bo mają własne narzędzia


To jest kurs dla początkujących. Ale prawdę powiem ze jak robię stronkę z bazą to używam narzędzie phpMyAdmin

Cytat
I gdzie ten skrypt komentarzy jest?


Może źle to powiedziałem, ale chodzi o te komentarze na dole kursuphp, na razie bez kodu. Może znajdzie się jakiś spec i znów mi wyświetli komunikaty (chociaż wątpie bo bardzo to zabezpieczałem)

EDit: I już rozwalone. Jakim cudem? Od już daje kod stronki:



  1. <?
  2. $tresc = $_POST["tresc"];
  3. $nick = $_POST["nick"];
  4.  
  5. if(preg_match('#[a-z0-9A-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.]{1,200}#is',$tresc) && preg_match('#[a-z0-9A-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.]{1,200}#is',$nick)) {
  6.  
  7. $baza = mysql_connect("dfgfdl","dfgfd","dfgdf") or die("Problem z serwerem");;
  8. $baza = mysql_select_db("dfgdfg") or die("Problem z bazą");
  9. mysql_query("insert into kursphp SET tresc='$tresc', nick='$nick'");
  10. echo("<script src=przerkierowanie.js></script>");
  11. }
  12. else
  13. {
  14. echo("<center><br><br><img src=images/xss.jpg></img>");
  15. }
  16. ?>
!*!
Cytat(materkamil @ 3.05.2012, 20:10:43 ) *
Od tego jest jakość HD w rozdzielczości mojego monitora 1366x768 więc odtwarzany na laptopie idealnie pasuje na cały ekran.


Już to przerabialiśmy. Nic nie widać.

Cytat(materkamil @ 3.05.2012, 20:10:43 ) *
Skąd do wymyśliłeś? Przecież w ramach kursu PHP jest wprowadzenie do SQL, jak będziesz pisał funkcje mysql_query?

mysql* już się nie używa i prawdopodobnie w kolejnych wersjach PHP zniknie.

Cytat(materkamil @ 3.05.2012, 20:10:43 ) *
Może źle to powiedziałem, ale chodzi o te komentarze na dole kursuphp, na razie bez kodu. Może znajdzie się jakiś spec i znów mi wyświetli komunikaty (chociaż wątpie bo bardzo to zabezpieczałem)


Jak widać na stronie z komciami, niczego nie zabezpieczyłeś bo już jest rozwalona.
materkamil
Kod wyżej. baaasmiley.gif Ktoś się na prawdę zna... oneeyedsmiley02.png
!*!
Nadal masz skrypt podatny na wszytko. Niczego się nie nauczyłeś po ostatnim? Ehh szkoda czasu...
materkamil
Jest przecież preg_match!
!*!
Cytat(materkamil @ 3.05.2012, 20:18:02 ) *
Jest przecież preg_match!


O łał, poważnie? A po co Ci on? I dlaczego sądzisz że preg_match ma Cie bronić przed czymkolwiek?
materkamil
Przecież filtruje zmienną. Nie można wpisać żadnych znaków HTML bo jest filtracja. Jak on przesłał tagi html? przecież wszystko jest wycięte
!*!
Jak widzisz nic nie jest wycięte. Sprawdzasz czasami skrypty które piszesz? Sytuacja się powtarza tak jak przy skrypcie wysyłania plików.

Sprawdź czy formularz został wysłany, usuń kod html, a jak już chcesz go mieć to wybierz jakie tagi mogą przejść, filtruj dane po prostu, a jak już używasz p_g to rób to dobrze, a nie tworzysz jakieś dziwolągi które przepuszczą dosłownie wszytko, nawet kod JS.

Edycja:
I czy Ty na pewno wiesz co czego jest preg_match? Patrząc na kod śmiem wątpić.
Czy następny art będzie o tym jak "shackowano" Ci komentarze?
k_@_m_i_l
Cytat(materkamil @ 3.05.2012, 19:08:04 ) *
chociaż raczej wszystko zabezpieczyłem.
PS: Dodam że polskie znaki nie działają, ale rozwiązuje ten problem już w innym wątku.



Ech, nie potrafisz ustawić kododawania polskich znaków w bazie danych a próbujesz innych uczyć php ? Za bardzo chłopcze chyba uwierzyłeś, że potrafisz kodować cuda, jakich nikt inny nie potrafi. Nie chcę zbytnio krytykować, ale kup sobie książkę (choćby tą: http://helion.pl/ksiazki/php-i-mysql-tworz...son,phms4v.htm), zaszyj się w domu i dopóki jej nie przeczytasz i nie zrozumiesz to nie wystawaj nic do publicznego widoku.
Ja rozumiem, że każdy się uczył i każdy popełniał ewidentne błędy, ale nie każdy wystawiał to do oceny, a co więcej: nikt (chyba ;p) z takim poziomem wiedzy, a raczej niewiedzy nie próbował innych uczyć.
materkamil
Cytat
nie potrafisz ustawić kododawania polskich znaków w bazie danych


Problem na pewno nie tkwi w tym

Cytat
Jak widzisz nic nie jest wycięte.


Jak nic nie jest wycięte. To wpisz sobie pod nick: < to zobaczysz co ci się pojawi (błąd i obrazek)!. W takim razie jak przesłano kod, skoro jeśli zmienna zawiera < to jest od razu odrzucana?

Początkowe kursy to tylko tekst, zmienne, pliki i baza więc proste rzeczy. Już to potrafię, kod jakiegoś skryptu z bazą czy coś w tym stylu piszę z zamkniętymi oczami więc myślę że opanowałem to już dobrze.
pyro
Cytat
Dzis dodalem system komentarzy Niestety polskie litery nie chca dzialac ale naprawiam ten problem


Cytat
Przypominamy iż w komentarzach ze względów bezpieczeństwa dopuszczalne są jedynie cyfry i litery


Dodatkowo ten "system komentarzy" nie działa.

No naprawdę... ale to jest właśnie przykład jak skryptów / stron nie robić. To fajnie, że chcesz pełnić dydaktyczną funkcję, ale jak chce się czegoś uczyć, to wypadałoby coś o danej tematyce najpiew wiedzieć, nieprawdaż?
materkamil
Jak to nie działa? Działa i to dobrze!

Cytat
coś o danej tematyce najpiew wiedzieć, nieprawdaż?


O jaki brak wiedzy mnie oskarżacie? Wszystkie kwestie przedstawione w kusie wiem, umie i rozumie w 100%.

I chciałbym wiedzieć bo ja nie wiem jak:

Cytat
W takim razie jak przesłano kod, skoro jeśli zmienna zawiera < to jest od razu odrzucana?
!*!
Cytat(materkamil @ 3.05.2012, 23:46:01 ) *
O jaki brak wiedzy mnie oskarżacie? Wszystkie kwestie przedstawione w kusie wiem, umie i rozumie w 100%.


To że wiesz jak napisać echo i zapewne zrobisz to tak:

  1. echo ("test");


Nie znaczy że jest to poprawne.

Poprzednia wersja pozwalała normalnie na przesłanie kodu html i js z poziomu formularza, Twoje wyrażenie przepuszczało wszytko, bo tak je napisałeś czyli "przepuść gdy znajdziesz wymienione znaki."

A tak w ogóle, treść powinna być w textarea.
Kokoszz
coś dziurawy ten Twój skrtpt.. wstydnis.gif nawet bardzo
usb2.0
biggrin.gif:D:D
dobre jak sie nic nie poda tylko przesle pusty form -> http://materdefense.ugu.pl/images/xss.jpg
:DDDDDDDD
phpion
Cytat(materkamil @ 3.05.2012, 23:46:01 ) *
O jaki brak wiedzy mnie oskarżacie? Wszystkie kwestie przedstawione w kusie wiem, umie i rozumie w 100%.

Troszkę pokory. Jeśli bardziej zaawansowani użytkownicy piszą Ci, że masz jakieś braki to tak jest. Obejrzałem 2 Twoje kursy (3 i 7) i stwierdzam, że faktycznie powinieneś troszkę bardziej zgłębić temat programowania w PHP zanim zaczniesz uczyć innych.

Co do komentarzy: zabezpiecz się przed ponownym dodawaniem X komentarzy pod rząd poprzez odświeżenie strony. Jak? Poszukaj, poczytaj, poucz się.
!*!
Cytat(usb2.0 @ 4.05.2012, 09:40:43 ) *
biggrin.gif:D:D
dobre jak sie nic nie poda tylko przesle pusty form -> http://materdefense.ugu.pl/images/xss.jpg
:DDDDDDDD


A czemu chciałeś mu zrobić XSS? ohno-smiley.gif
materkamil
Zaraz to zabezpiecze, jednak zrobiłem trochę inny "chwyt". Dodałem do skryptu taką funkcję że po każdym przesłanym komentarzu pobiera się IP.

No ale teraz dlaczego przepuszcza znaki ; i &?questionmark.gif Przecież jak wpiszę ; lub & pokazuje obrazek!
usb2.0
Cytat
A czemu chciałeś mu zrobić XSS?

do tej pory mialem inne pojecie o xss:P
!*!
Cytat(materkamil @ 4.05.2012, 09:52:17 ) *
Zaraz to zabezpiecze, jednak zrobiłem trochę inny "chwyt". Dodałem do skryptu taką funkcję że po każdym przesłanym komentarzu pobiera się IP.


A po co Ci to IP? To tylko nagłówek który można nadpisać, ktoś za każdym odwołaniem formularza który wykona się co sekundę, będzie mieć inne IP, to nie tu leży problem.

Cytat
do tej pory mialem inne pojecie o xss:P


Ja też... ciekawe czy w google wiedzą o tym.
materkamil
Jeśli chodzi o XSS to jest to stary obrazek jeszcze sprzed tamtego skryptu. Chodziło o to że jak ktoś użyje znaku >, < lub jakiegoś tagu HTML od razu jako błąd mu wyświetla obrazek o XSS

PS: Myśle nad tym zabezpieczeniem ale coś nie za bardzo mam pomysł. Pierwsze po ściągnięciu IP pokazało się miasto -> POZNAŃ, ale teraz idzie przez proxy
phpion
Zakazujesz używania <, a co jeśli jakaś laseczka będzie chciała wstawić serduszko <3?
!*!
Pokaż kod, to raz. A dwa... Ty na prawdę nie masz pojęcia co robisz. Przemyśl swój skrypt od początku i to jak ma działać. I dlaczego ma być błąd jak wpiszę < lub >? a co ja w komentarzu będę chciał napisać 0<1 ?

edycja:

@up: na numer z serduszkiem nie wpadłem sad.gif
k_@_m_i_l
! albo ? też nie da się przesłać. Śmiechu warte to wszystko jest biggrin.gif
materkamil
Cytat
I dlaczego ma być błąd jak wpiszę < lub >?


Bo blokuje to wyrażenie regularne. Można używać tylko liter, cyfr i polskich znaków.

  1. if(preg_match('#[a-z0-9A-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.]{1,200}#is',$1niepowiem) && preg_match('#[a-z0-9A-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.]{1,200}#is',$2niepowiem)) {


Do tego jest strip_tags
usb2.0
to się laseczka zmartwi pewnie : P
ale ja kolego nie wpisalem nic a mimo to zostalem posądzony o atak no to jak w koncu hm?
!*!
Tylko ja mam wrażenie że te wyrażenie zwraca true gdy wystąpi znak?
materkamil
Ja nie!

Przecież to jest: preg_match czyli jeśli pasuje to schematu a-zA-Z0-9 to wtedy {
wykonaj sql
}
else
{
komunikat blad
}

Przecież po wpisaniu u mnie dowolnego znaku cały czas jest błąd!
!*!
Zacznijmy od tego że zmienna nie może zaczynać sie od cyfry, a Twoje wyrażenie zwraca true gdy znajdzie a-z0-9A-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\. więc zrobiłeś dokładnie odwrotnie. Sprawdź co Ci pokazuje to w var_dump() bo u mnie jest jak w mordę strzelił że TRUE.
phpion
Cytat
$1niepowiem

Najpierw dowiedz się jak można, a jak nie można nazywać zmiennych. Nawet jeśli te nazwy podmieniłeś tu na forum by utrudnić życie hackerom (ciekawe jak mieliby wykorzystać wiedzę o nazwie zmiennej...) to i tak zrobiłeś to błędnie smile.gif
k_@_m_i_l
Przepraszam, za offtop ale natrafiłem na inny wątek @materkamil-a (http://forum.php.pl/Nasz_Internet_umarl_przez_gotowe_skrypty_t197980.html) gdzie twierdzi:
Cytat
"Admini tych stron nie wiedzą co to jest HTML, nie mówiąc o PHP. ".


Materkamil - Ty spójrz na siebie, bo to co prezentujesz w tym wątku i w wątku poprzednim o stronie, to jest tragedia. Nie znasz php, więc zgodnie z Twoim tokiem rozumowania to sam nie powinieneś posiadać strony, bo o PHP to nie masz zielonego pojęcia.

I na marginesie, to widzę, że rowolucje chcesz przeprowadzić:
Cytat
Wg. mnie pasowało by zrobić rewolucję w Internecie, wykasować te wszystkie jomle, wordpressy.
!*!
Cytat
Duchowny † stawiam krzyż nad Twoim losem programisty

Ludzie są okrutni santa.gif

Ok, czekamy na poprawiony i w 100% bezpieczny (po raz kolejny) skrypt.
materkamil
Cytat
a Twoje wyrażenie zwraca true gdy znajdzie a-z0-9A-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.


Ale po tym jest jeszcze {1,200} więc wyrażenie zwraca true przecież jak znajdzie od 1-200 znaków które są jedynie literami i cyframi a jak znajduje znak np: taki > to zwraca false.

U mnie żaden znak taki jak <, >, /, ; itp nie przechodzi. Przechodzą na true tylko litery i cyfry. Tzn. wpisuje jeden z wymienionych znaków i wywala false.
!*!
Cytat(materkamil @ 4.05.2012, 10:37:40 ) *
Ale po tym jest jeszcze {1,200} więc wyrażenie zwraca true przecież jak znajdzie od 1-200 znaków które są jedynie literami i cyframi a jak znajduje znak np: taki > to zwraca false.

To tylko sprawdza czy znaki występują w ilośći od 1 do 200.

Cytat(materkamil @ 4.05.2012, 10:37:40 ) *
U mnie żaden znak taki jak <, >, /, ; itp nie przechodzi. Przechodzą na true tylko litery i cyfry. Tzn. wpisuje jeden z wymienionych znaków i wywala false.


U mnie po wpisaniu <div> zwraca true, dlaczego? bo div pasuje do tego wyrażenia. False zwraca gdy wpiszę samo <>.
materkamil
Zwariowałem już całkiem. W takim razie jak zmienić to wyrażenie aby przepuściło tylko litery.

Skrypt już jest bezpieczny w 100% bo jest wycinanie tagów więc nic nie użyjesz
k_@_m_i_l
Cytat(materkamil @ 4.05.2012, 10:54:58 ) *
Skrypt już jest bezpieczny w 100% bo jest wycinanie tagów więc nic nie użyjesz


Za każdym razem Twoje skrypty są w "100% bezpieczne", a jednak zawsze coś nie działa. Czyżbyśmy mieli na forum takich specjalistów, którzy są w stanie obejść skrypty "zabezpieczone w 100%" ?
!*!
  1. if(preg_match('/^[a-z0-9]+$/',$x))


Mniej więcej, jednak to i tak bzdura, bo powinieneś dopuszczać w treści znaki <> uprzednio zmieniając je na encje (poszukaj w dokumentacji).
phpion
Cytat(materkamil @ 4.05.2012, 10:54:58 ) *
Zwariowałem już całkiem. W takim razie jak zmienić to wyrażenie aby przepuściło tylko litery.

Poczytaj o ograniczniku początku (^) oraz końca ($).
materkamil
Cytat(!*! @ 4.05.2012, 11:01:23 ) *
  1. if(preg_match('/^[a-z0-9]+$/',$x))


No ale tu nie działają znaki polskie.
!*!
Cytat(materkamil @ 4.05.2012, 11:15:26 ) *
No ale tu nie działają znaki polskie.


To sobie dopisz. Poza tym masz głupi zwyczaj wysyłania formularza do innego pliku. Po co Ci to? To wiele ułatwia atakującemu.
materkamil
Zrobiłem takie coś:
[a-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.]

i znaki polskie dalej nie chcą działać
!*!
U mnie działają. Ucz się a nie głupio przepisujesz kod który ktoś Ci podał.
materkamil
Jak ktoś mi podał:

a-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.
a-z0-9 - wiadomo
potem pojedyncze znaki
\s - spcja
\. - kropka

Wyżej kod samemu napisałem i jest wg mnie poprawny jednak nie puszcza, zobacz na komentarze, bo mi nie działa
!*!
W temacie w przedszkolu i tutaj już Ci podano odpowiedź. Wszytko zostało napisane i działa poprawnie. Jak wykorzystujesz teraz te wyrażenia? co z tego że mi pokazujesz [a-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.] jak to tylko połowa tego co masz zrobić.
materkamil
  1. <?
  2.  
  3. $adresxxx = $_SERVER['REMOTE_ADDR'];
  4. $browsera = strtolower($_SERVER['HTTP_USER_AGENT']);
  5. $tresc = $_POST["tresc"];
  6. $nick = $_POST["nick"];
  7. $trescx = strip_tags($tresc);
  8. $nickx = strip_tags($nick);
  9.  
  10.  
  11. if(preg_match('/^[a-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s]+$/',$tresc) && preg_match('/^[a-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\.\s]+$/',$nick)) {
  12.  
  13. $baza = mysql_connect("sdfdsl","dfgdf","sdf") or die("Problem z serwerem");;
  14. $baza = mysql_select_db("sdf") or die("Problem z bazą");
  15. mysql_query("insert into kursphp SET tresc='$trescx', nick='$nickx', adresxxx='$adresxxx', przegladarka='$browsera'");
  16. echo("<script src=przerkierowanie.js></script>");
  17. }
  18. else
  19. {
  20. echo("<center><br><br><img src=images/xss.jpg></img>");
  21. }
  22. ?>
!*!
Czyli sprawdzasz $tresc a do bazy wkładasz $trescx ? ŁAŁ
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.