Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >

greycoffey
Napisane: 10.08.2012, 22:03:58





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

  1. $this->model = new stdClass;
  2. $this->addon = new stdClass;

Dodaj na początku metody __construct() w Controller_Base. Proszę wink.gif
  Forum: Poszukuję · Podgląd postu: #984641 · Odpowiedzi: 13 · Wyświetleń: 745

greycoffey
Napisane: 10.08.2012, 21:58:32





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Te głosy nie są nigdzie zapisywane wink.gif Jako, że dziś mam przypływ dobroci:
Funkcja oddaj_glos nei ma w sumie sensu - sprawdzasz czy $wybor == 1, jesli tak, inkrementujesz $opcje[1] etc.
Wystarczyłoby ++$opcje[$wybor];

Tworzysz plik dane.txt, wpisujesz do niego w każdej linii ilość głosów, czyli na początek (mamy np. 4 opcje):

Kod
0
0
0
0


  1. <?php
  2. // wczytujemy zawartość pliku do tablicy - każdy w nowym wierszu (tablice są numerowane od 0)
  3. $glosy = file('dane.txt');
  4.  
  5. // jesli istnieje zmienna $_POST['glos']
  6. if (isset($_POST['glos'])) {
  7. // sprawdzamy czy cookie istnieje
  8. if (!isset($_COOKIE['glosoddany'])) {
  9. ++$glosy[$_POST['glos']]; // inkrementujemy ten wiersz, na ktory wskazuj (o tym pozniej, przy renderowaniu formularza
  10. file_put_contents('dane.txt', implode("\n", $glosy)); // zapisujemy w pliku nowa ilosc glosow
  11. setcookie('glosoddany', '1', time()+60*60*24);
  12. } else {
  13. echo "Już oddałeś głos!<br/>";
  14. }
  15.  
  16. //listujemy liczbe glosow
  17. foreach ($glosy as $wiersz=>$iloscGlosow) {
  18. echo "$wiersz => $iloscGlosow<br/>";
  19. }
  20. } else {
  21. // wyswietlamy formularz
  22. ?>
  23. <html>
  24. Wybierz odpowiedz
  25. <form action="?" method="post" >
  26. <?php foreach($glosy as $wiersz) { ?>
  27. <input type="radio" name="glos" value="<?=$wiersz?>"/><?=$wiersz?><br/>
  28. <?php } ?>
  29. <input type="submit" value="OK" /><br/>
  30. </html>
  31. <?php
  32. }
  33. ?>


Powinno działać, a jeśli nie albo tak, przeczytakj to anyway:
Włącz wyświetlanie błędów, oraz poziom raportawania na taki, aby wyświetlał E_NOTICE. Znajdziesz o tym dużo informacji w internecie. Chodzi o to, aby kod:
  1. <?php
  2. echo $nieistniejacaZmienna;
  3. ?>

Zwracał Ci błąd E_NOTICE, a nie wyświetlał pustą stronę.

Jeśli napiszesz kolejny post, a jednak nie będziesz miał włączonego raportowania E_NOTICE, Bóg zabije jednego kotka wink.gif
  Forum: Przedszkole · Podgląd postu: #984640 · Odpowiedzi: 9 · Wyświetleń: 1 590

greycoffey
Napisane: 10.08.2012, 14:09:21





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Parser nie spodziewał się zmiennej (token T_VARIABLE), tylko czegoś innego. Wklej cały plik, a najlepiej naucz się rozwiązywać trywialne 'syntax error'.
  Forum: PHP · Podgląd postu: #984505 · Odpowiedzi: 4 · Wyświetleń: 262

greycoffey
Napisane: 8.08.2012, 22:50:30





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

  1. $numerek = rand(1, 69);
  2. $nazwaZmiennej = 'zmienna'.$numerek;
  3. echo $$nazwaZmiennej;
  4. // zauważ dwa $$ - najpierw pobiera $nazwaZmiennej, zalozmy zmienna24, potem pobiera wartość $zmienna24
  Forum: Przedszkole · Podgląd postu: #984188 · Odpowiedzi: 1 · Wyświetleń: 137

greycoffey
Napisane: 31.07.2012, 19:51:01





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Kod
/**
  * @ORM\OneToMany(targetEntity="Category", mappedBy="section_id")
  */
protected $categories;


To jest mapowane przez właściwość section, nie przez section_id.
  Forum: Frameworki · Podgląd postu: #982222 · Odpowiedzi: 3 · Wyświetleń: 213

greycoffey
Napisane: 13.07.2012, 08:20:10





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Cytat(Sephirus @ 13.07.2012, 08:40:44 ) *
Hasła userów hashowane były poprzez SHA1 przy pomocy dwóch saltów. Pierwszy był saltem ogólnym/wspólnym i znaleźć go można było w kodzie aplikacji. Drugi był konkretnym saltem dla danego usera (nie pamiętam już jak generowanym ale załóżmy że losowo - był przechowywany obok hasła w bazie). Wyjściowy hash wyglądałe mniej więcej tak: SHA1(salt1.hasło.salt2);

Chwalono to tak:
- sha1 zamiast md5 - dłuższy hash - czyli na +
- nie jeden a dwa salty - też na +
- 1 dynamiczny salt- +
- salty w różnych miejscach +

A teraz zobaczcie czy to cokolwiek daje? Szczerze - totalne nic!

Włam do bazy i mam hasło i jeden salt - zerknę na kod i już mam komplet - czym to się różni od innych metod "prostych" - prawie niczym - owszem jest może nieco więcej pracy ale tylko odrobinę. Odpowiedni skrypt c/c++ na mocnym sprzęcie, podłączenie do bazy i bruteforcem można przelecieć wszystkie hasła dość szybko.

Nie zawszę masz dostęp i do bazy i do kodu źródłowego skryptu. Włam do bazy nie oznacza możliwości podejrzenia kodu źródłowego, dlatego ja będę zawsze za dwoma saltami. Co do przelecenia wszystkich haseł bruteforce: nie da się tego zrobić. Jeśli doobrze wiem, zbiór haseł jest nieskończony, to zbiór skrótów jest skończony bo 16^40 w przypadku SHA1. Co masz na myśli mówiąć "podłączenie do bazy"? Możliwości w wypadku SHA1 masz 1.46150164*10^48, nie wydaje mi się, że tak szybko je wszystkie znajdziesz (co nei nzaczy, że polecam SHA1).
  Forum: Przedszkole · Podgląd postu: #977023 · Odpowiedzi: 14 · Wyświetleń: 585

greycoffey
Napisane: 12.07.2012, 21:15:30





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Co do tęczowych tablic, przyznaje się, nei wiem zbyt wiele na ten temat - w każdym razie sól jest obroną przed nimi, ponieważ wydłużają one hasła, a tęczowe tablice służą jako kompormis między wszystkimi parami klucz:hash a ich generowaniem w trakcie wykonywania programu łamiącego.
Sole nie muszą być inne, jak wspomniałem, chronią one przed atakami brute force na skrócie oraz użyciu tęczowych tablic na skrócie.

Dlaczego hash stworzony z ciągu 30 znaków miałby być gorszy od stworzonego z 8 znaków? To nie ma znaczenia w tym wypadku, bowiem wszystkie skróty osiągają format [0-9a-f]{32}. Mógłbyś mi powiedzieć, na jakiej podstawie doszedłeś do wniosku, że większość soli ma mało znaków?
  Forum: Przedszkole · Podgląd postu: #976988 · Odpowiedzi: 14 · Wyświetleń: 585

greycoffey
Napisane: 12.07.2012, 19:49:53





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Hej,
dodanie soli zwiększa bezpieczeństwo wobec ataków bruteforce przeprowadzanych na podstawie zakodowanego hasha nieznaną solą oraz głównie wyeliminowaniu skuteczności tęczowych tablic oraz ataków słownikowych - "ania1980" zmienia się w "ania1980fghfgh267556". Tęczowe tablice to właśnie zbiór wieelu hashów haseł oraz oczywiście często używanych wyrazów. Szansa na kolizję jest taka sama dla 3 znakowego hasła jaki i 20 znakowego. Podwójne hashowanie zwiększa kolizję, ponieważ możemy znaleźć dwie wiadomości A i B, gdzie H(A) != H(cool.gif ale H(H(A)) == H(H(cool.gif) i analogicznie: jeśli H(A) == H(cool.gif to też H(H(A)) == H(H(cool.gif). Sól dla każdego hasła nie musi być inna, ponieważ i tak, chodzi o to, aby zapobiec tęczowym tablicom.

Rozwiązanie które podajesz jest metodą "security through obscurity" - gdy ktoś wejdzie we władanie kodu źródłowego, przerobi skróty na prawdziwe. Najlepszą metodą będzie tu skorzystanie z wolnego oraz matematycznie poprawnego algorytmu mieszającego (sha512).
  Forum: Przedszkole · Podgląd postu: #976975 · Odpowiedzi: 14 · Wyświetleń: 585

greycoffey
Napisane: 10.07.2012, 08:45:38





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Od kilku dni sam uczę się Symfony2, dokumentacja dobra, brakuje tylko trochę "user contributed notes" jak w manualu PHP wink.gif Zawsze jest to forum, stackoverflow i inne serwisy, gdzie ktoś miał ten sma problem i opwoie jak go rozwiązać. Po kilku dniach czuję się w miarę wsobodnie, ale na początku byłem totalnie zagubiony. ORM wbrew pozorom fajna sprawa, trzeba się do niego tylko najpierw przekonać, a Twig to chyba najlepszy system szablonów jakiego używałem.
  Forum: Object-oriented programming · Podgląd postu: #976197 · Odpowiedzi: 28 · Wyświetleń: 2 506

greycoffey
Napisane: 5.06.2012, 18:23:19





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Co to za stała "CURLOPT_PRADO_POSTFIELDS"?
Btw. poczytaj o "CURLOPT_COOKIESESSION".
  Forum: PHP · Podgląd postu: #967634 · Odpowiedzi: 2 · Wyświetleń: 276

greycoffey
Napisane: 3.06.2012, 15:43:39





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Kod
pentagon greycoffey # chmod --help
Składnia: chmod [OPCJA]... UPRAWN[,UPRAWN]... PLIK...
    albo: chmod [OPCJA]... UPRAWN_ÓS PLIK...
    albo: chmod [OPCJA]... --reference=PLIK_WZ PLIK...
Zmiana uprawnień do każdego PLIKU na UPRAWN.

  -c, --changes           jak -v, ale podanie tylko kiedy zaszła zmiana
      --no-preserve-root  bez traktowania katalogu '/' w specjalny sposób
                            (domyślnie)
      --preserve-root     odmowa rekusywnego działania na '/'
Zmienia uprawnienia do każdego PLIKU do UPRAWN.
  -f, --silent, --quiet   wyłączenie większości komunikatów o błędach
  -v, --verbose           wypisanie informacji o każdym przetwarzanym pliku
      --reference=PLIK_WZ użycie uprawnień pliku PLIK_WZ zamiast wartości UPRAWN
  -R, --recursive         zmiany też w plikach w podkatalogach
      --help     wyświetlenie tego opisu i zakończenie
      --version  wyświetlenie informacji o wersji i zakończenie

UPRAWNIENIA mają formę `[ugoa]*([-+=]([rwxXst]*|[ugo]))+'.

Raporty o błędach chmod wysyłaj do bug-coreutils@gnu.org
strona domowa GNU coreutils: http://www.gnu.org/software/coreutils/
Pomoc w używaniu oprogramowania GNU: http://www.gnu.org/gethelp/
O błędach tłumaczenia chmod poinformuj przez http://translationproject.org/team/
Żeby przeczytać kompletną dokumentację uruchom: info coreutils 'chmod invocation'


Generalnie polecam dodawanie '--help' gdy nie wiemy lub szukanie w manie.
  Forum: Komputery i oprogramowanie · Podgląd postu: #967212 · Odpowiedzi: 3 · Wyświetleń: 10 680

greycoffey
Napisane: 29.05.2012, 19:28:26





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Cytat(Szymciosek @ 29.05.2012, 20:13:09 ) *
1) Przy każdym logowaniu sprawdzam czy token użytkownika jest w bazie i zgadza się z tym który gość ma w cookie ?
2) Przy każdym pierwszym logowaniu (gdy brak cookie -> czyli użytkownik dawno się nie logował albo wcisnął WYLOGUJ) generuję losowy token i zapisuję/aktualizuję z tym, który jest zapisany przy logującym się użytkowniku ?

1) Taki schemat:
Jeśli użytkownik nie jest azlogowany a posiada ciastko o nazwie 'token':
Sprawdź czy istnieje w bazie, jeśli tak, zaloguj go.
Jeśli nie - usuń.
W przeciwnym wypadku pomiń te akcje.

2) Tak.

Polecam do tego ciastko ustawić z flagą httpOnly aby zapobiec niektórym rodzajom przechwyceń. Więcej w manualu do funkcji setcookie.
  Forum: Przedszkole · Podgląd postu: #966158 · Odpowiedzi: 17 · Wyświetleń: 558

greycoffey
Napisane: 10.05.2012, 13:59:52





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

  1. <?php
  2. $array = array(0,1,2,3,4);
  3. for($i=0 /* $i to tak jakby wskaźnik */;$i<count($array);++$i /* tutaj robimy jakby next*/)
  4. {
  5. echo $array[$i].PHP_EOL;
  6. }

W tym wypadku $i jest wskaźnikiem, next() go inkrementuje, rewind() ustawia na 0.
key() zwraca klucz danego obiektu, a current() wartosc.
  Forum: Object-oriented programming · Podgląd postu: #962445 · Odpowiedzi: 12 · Wyświetleń: 512

greycoffey
Napisane: 6.05.2012, 21:21:01





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Rozdzielenie baz nie ma sensu, możesz jedynie używać innych baz jeśli nie zachodzą między nimi relacje, w innym wypadku nie ma sensu. Backup najlepiej robić do plików SQL, zamiast na bazę backupową - jak MySQL Ci padnie to całe - i co wtedy? Co do serwera, w zależności od potrzeb. Stawiałbym od VPSów, ale jeśli budżet wynosi ok. 200zł brutto/miesiąc to polecam Kimsufi 16G z gamy OVH, wystarczy podstawowa wiedza nt. konfiguracji takiego serwera, a hardware jest bardzo dobry i uciągnei nawet wiele takich wymagających serwerów.
  Forum: Przedszkole · Podgląd postu: #961560 · Odpowiedzi: 9 · Wyświetleń: 388

greycoffey
Napisane: 4.05.2012, 22:16:20





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Cytat(black_jack @ 4.05.2012, 23:13:31 ) *
Oto mi chodziło:

  1. else if(preg_match('#[^a-zA-Z0-9._]#', $plik[name]))


Poprawność $plik[name] sprawdzam wcześniej. / oraz * nie są potrzebne bo $plik[name] zawiera tylko "kasia.jpg" lub "fajnie45.gif".

MD5 mnie nieurządza tutaj ponieważ dostałbym zakodowane "far4qr45qt4.jpg" smile.gif .

Problem solved. Dzięki

Btw. kropka w wyrażeniu regularnym powinna być zabackslashowana(?) "\.", w innym wypadku zastępuje wszelkie inne znaki.
  Forum: PHP · Podgląd postu: #961088 · Odpowiedzi: 10 · Wyświetleń: 477

greycoffey
Napisane: 4.05.2012, 22:13:06





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

http://php.net/manual/pl/intro.pcre.php
www.bitcetera.com/page_attachments/0000/0030/regex_in_a_nutshell.pdf
pluton.pol.lublin.pl/~beatap/PHP/PHP_w3.pdf
  Forum: Przedszkole · Podgląd postu: #961085 · Odpowiedzi: 10 · Wyświetleń: 529

greycoffey
Napisane: 3.05.2012, 20:21:48





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Poczytaj o CSRF i sposobach na ich zapobieganie.
  Forum: Przedszkole · Podgląd postu: #960755 · Odpowiedzi: 1 · Wyświetleń: 109

greycoffey
Napisane: 29.04.2012, 15:56:00





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Cytat(Niktoś @ 29.04.2012, 16:50:38 ) *
A kolumna user_id to ma typ int?Jeśli tak to najprawdopodobniej trzeba by było rzutować:
  1. $sql = "SELECT `punkty` FROM `uzytkownicy` WHERE user_id="(int)$_SESSION['uzyt'];

lub
  1. $sql = "SELECT `punkty` FROM `uzytkownicy` WHERE user_id={$_SESSION['uzyt']}" ;

Rzutowanei akurat nie ma nic do rzeczy. Autorze,
  1. $wynik = mysql_query($sql) or die(mysql_error());

i pokaż nam co to zwróci.
Zapytanie jest ok, pewnie albo połączenie złe, albo struktura zła.
  Forum: Przedszkole · Podgląd postu: #959789 · Odpowiedzi: 14 · Wyświetleń: 405

greycoffey
Napisane: 19.04.2012, 14:31:38





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Fifi209, a nagle zachodzi potrzeba użycia dwóch połączeń do bazy danych - bo jedna zawiera ogromne ilości danych roboczych, a w drugiej są już te dane przetworzone. Jak byś zrobił taką przetwarzarkę, kiedy połączenie z baża danych było tylko jedno? Singleton to antywzorzec, w 99.99% przypadków NIE JEST potrzebny.

Co do autora, kod obiektowy to to nie jest, tylko opakowany w klasy. Connection, to mogłaby być zmienna przechowująca uchwyt do bazy, funkcja to connect() lub disconnect(). Disconnection nie może istnieć, bo jest niepoprawne gramatycznie. Ktoś dobrze napisał, żeby zrobić to w metodach __construct() i __destruct(). Nie rozumiem stosowania pól statycznych, jak już robisz typową klasę uczących się programowania obiektowego, czyli sterownik do bazy danych, fajnie byłoby gdyby sterownik do bazy danych komunikował się z managerem baz danych. Raz stosujesz mojaFunkcja() a raz moja_funkcja() - zdecyduj się na jedno nazewnictwo, bo potem obudzisz się z ręką w nocniku jak przyjdzie więcej kodu.

Skrobnąłem Ci przykładowy kod, w którym możesz zobaczyć zarys projektowy (?) przykładowej klasy do obsługi bazy danych. Pisałem z palca i nie testowałem, więc może są jakieś drobne błędy, które sobie poprawisz. Już teraz widzę, że rozszyfrowywaniem $dsn powinien się zajmować DatabaseManager, drivery powinny być przechowywane w tablicy DatabaseManeger::$drivers jako np. 'mysql'=>$mysqlDriver, a DatabaseManager powinien sprawdzać czy istnieje tam system bazodanowy z dsn i na podstawie tego wybrać sterownik lub zwrócić wyjątek, że nie znaleziono pasującego sterownika. To także zostawiam dla Ciebie wink.gif

  1. <?php
  2.  
  3. interface DatabaseDriver
  4. {
  5. public function __construct($dsn);
  6. public function __destruct();
  7. public function executeQuery($query);
  8. public function getNumberOfRows($result);
  9. public function getOneRow($result);
  10. // public function getAllRows($result); // to potem można zaimplementować, mi się nie chciało już
  11. }
  12.  
  13. class DatabaseDriver_MySQL implements DatabaseDriver
  14. {
  15. protected $resource;
  16.  
  17. public function __construct($dsn)
  18. {
  19. // jakoś rozbijamy $dsn na $hostname, $username, $password, $databasename
  20. $this->resource = mysql_connect($hostname, $username, $password);
  21. if(!$this->resource)
  22. throw new Exception("Coś poszło źle!");
  23. if(!mysql_select_db($databasename, $this->resource))
  24. throw new Exception("Baza danych '$databasename' nie istnieje!");
  25. }
  26.  
  27. public function __destruct()
  28. {
  29. mysql_close($this->resource);
  30. }
  31.  
  32. public function executeQuery($query)
  33. {
  34. $result = mysql_query($query);
  35. if(!$result)
  36. throw new Exception("Houston, mamy problem!");
  37. return $result;
  38. }
  39.  
  40. public function getNumberOfRows($result)
  41. {
  42. return mysql_num_rows($result); //tu mozna jakas walidacje dorobic jeszcze
  43. }
  44.  
  45. public function getOneRow($result)
  46. {
  47. return mysql_fetch_assoc($result); //tu tez^^
  48. }
  49. }
  50.  
  51. class DatabaseDriver_PostgreSQL implements DatabaseDriver
  52. {
  53. protected $resource;
  54.  
  55. public function __construct($dsn)
  56. {
  57. // jakoś rozbijamy $dsn na $hostname, $username, $password, $databasename
  58. $this->resource = pg_connect("host=$hostname dbname=$databasename user=$username password=$password");
  59. if(!$this->resource)
  60. throw new Exception("Coś poszło źle!");
  61. }
  62.  
  63. public function __destruct()
  64. {
  65. pg_close($this->resource);
  66. }
  67.  
  68. public function executeQuery($query)
  69. {
  70. $result = pg_query($query);
  71. if(!$result)
  72. throw new Exception("Houston, mamy problem!");
  73. return $result;
  74. }
  75.  
  76. public function getNumberOfRows($result)
  77. {
  78. return pg_num_rows($result); //tu mozna jakas walidacje dorobic jeszcze
  79. }
  80.  
  81. public function getOneRow($result)
  82. {
  83. return pg_fetch_assoc($result); //tu tez^^
  84. }
  85. }
  86.  
  87. class DatabaseManager
  88. {
  89. protected $driver;
  90.  
  91. public function attachDriver(DatabaseDriver $driver)
  92. {
  93. $this->driver = $driver;
  94. }
  95.  
  96. public function __call($methodName, $arguments)
  97. {
  98. return call_user_func_array(array($this->driver, $methodName), $arguments);
  99. }
  100. }
  101.  
  102. $dm = new DatabaseManager;
  103. $dd = new DatabaseDriver_PostgreSQL("pgsql:host=myhost;dbname=mydatabasename;user=myuser;password=mypass");
  104. $dm->attachDriver($dd);
  105. $result = $dm->executeQuery("SELECT * FROM tabela");
  106. if($dm->getNumberOfRows($result)>0)
  107. {
  108. while($row = $dm->getOneRow($result))
  109. {
  110. // wyswietlasz dane ;)
  111. }
  112. }
  Forum: Object-oriented programming · Podgląd postu: #957453 · Odpowiedzi: 14 · Wyświetleń: 830

greycoffey
Napisane: 14.04.2012, 16:02:12





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Cytat(jaslanin @ 11.04.2012, 20:51:05 ) *
Odnośnie referer'a to zawsze musisz założyć że może być pusty (musisz zdecydować co wtedy chcesz zrobić) lub zafałszowany (musisz go sprawdzić, zresztą żadnej danej otrzymanej od użytkownika ufać nie możesz, zawsze musisz sprawdzać i zabezpieczać).

Jednym ze sposobów jest np. ograniczenie działania do jakichś domen np. poprzez użycie parse_url

ważną sprawę jest by nie sprawdzać czy zmienna HTTP_REFERER jedynie zawiera nazwę domeny bo można to ominąć np. tak dla domeny "domena.pl"

domena.pl.jestem-hakerem.pl/ukradne_ci_orzeszki.html

proste sprawdzanie tego nie wyłapie

należy robić to tak:

  1. <?
  2.  
  3. $_SERVER['HTTP_REFERER'] = 'http://forum.php.pl/Przedszkole_f27.html'; // Nie powinno sie zmieniac tak zmiennych systemowych w normalnym kodzie
  4. //$_SERVER['HTTP_REFERER'] = 'http://forum.php.pl.hacker.com/Przedszkole_f27.html';
  5. //$_SERVER['HTTP_REFERER'] = 'http://hacker.com/forum.php.pl.html';
  6.  
  7. if ($_SERVER['HTTP_REFERER'] != '') {
  8. $host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
  9.  
  10. if ('forum.php.pl' == $host) {
  11. echo "ok";
  12. } else {
  13. echo 'not ok';
  14. }
  15. }
  16. ?>


Skąd takie przeczulenie dotyczące danych przesyłanych przez użytkownika? W tym celu to nie ma sensu. To się dzieje, jedynie gdy ktoś sam majstruje przy refererze - jak atakujący miałby ustawić ofierze referera? Preparacja żądania AJAXowego nic nie da przeca, a jak ktoś wejdzie tam z innego linku, przekieruje go spowrotem wink.gif Nawet nie można tego wykorzystać do maskowania podejrzanych urli, jak na pewnym znanym protalu społecznościowym można było wywołać http://example.com/redirect?url=http://zuo...and_destroy.zuo.
Fajnie, że zwrcasz uwagę na bezpieczeństwo, ale też dobrze czasami iwedzieć, gdzie używać zabezpieczeń i jakich, a gdzie wcale wink.gif
  Forum: Przedszkole · Podgląd postu: #956121 · Odpowiedzi: 5 · Wyświetleń: 389

greycoffey
Napisane: 18.06.2011, 08:51:15





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Co dalej? Polecam ćwiczenia na wąską talię:

Cytat
Stań w rozkroku, ugnij nogi w kolanach, zegnij ręce w łokciach,
wykonaj skręt tułowia ciągnąc prawy łokieć w kierunku lewego kolana,
a następnie lewy łokieć w kierunku prawego.
Nie odrywaj stóp od ziemi.
Powtórz po 20 razy w każdą stronę.
  Forum: Hydepark · Podgląd postu: #873628 · Odpowiedzi: 10 · Wyświetleń: 933

greycoffey
Napisane: 2.05.2011, 21:43:55





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Aby uniknąć takich problemów, najlepiej trzymać się standardu PSR-0 ;-)
  Forum: Przedszkole · Podgląd postu: #860114 · Odpowiedzi: 4 · Wyświetleń: 494

greycoffey
Napisane: 6.04.2011, 18:50:31





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Zamiast $q daj $sql.
  Forum: PHP · Podgląd postu: #852716 · Odpowiedzi: 4 · Wyświetleń: 857

greycoffey
Napisane: 9.03.2011, 19:41:03





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Gdzie wykorzystujesz ten plik? Może go inkludujesz potem, bo on sam jest niezbyt przyjazny?
  Forum: Przedszkole · Podgląd postu: #844590 · Odpowiedzi: 11 · Wyświetleń: 845

greycoffey
Napisane: 20.02.2011, 14:49:09





Grupa: Zarejestrowani
Postów: 320
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----

Zmiennych nie można zaczynać od cyfr.
  Forum: Przedszkole · Podgląd postu: #839088 · Odpowiedzi: 2 · Wyświetleń: 204

2 Stron V   1 2 >

New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 25.02.2018 - 08:17