Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] kod dodający do bazy
Forum PHP.pl > Forum > Przedszkole
jorgus
Jak pod względem bezpieczeństwa przeorganizować ten kod ? Chyba, że zabieczenia dodane są już wystarczające ?

  1. <?php
  2. $sql = "SELECT news.*, komentarze.nick as knick, komentarze.nr as knr, komentarze.t
    resc as ktresc, 
  3. komentarze.data as kdata from news, komentarze where news.id = komentarze.newsID AND 
  4. komentarze.newsID=$id ORDER BY kdata ASC";
  5.  
  6. $wynik = @mysql_query ($sql);
  7. while ($news = @mysql_fetch_array ($wynik))
  8. {
  9.  
  10. $knr=stripslashes($news['knr']);
  11. $ktresc=stripslashes($news['ktresc']);
  12. $knick=stripslashes($news['knick']);
  13. $kdata=stripslashes($news['kdata']);
  14. $i++;
  15.  
  16.  
  17. echo '<h4> #' . $i . '</h4><p class="tresc">' . $ktresc . '</p><p class="autor">Napisał: ' . $knick . ' - <i>'
  18.  . $kdata . '</i></p>';
  19.  
  20.  
  21. }
  22.  
  23.  
  24.  print "<H3>Komentarz:</H3>";
  25. //echo "<form method="POST" action="nowy.php">";
  26.  print "<FORM METHOD=POST><INPUT TYPE="hidden" NAME="id" VALUE="$id">";
  27.  print "<B>Autor</B><BR><INPUT TYPE="text" NAME="nick" VALUE="$nick" SIZE=60><BR> ";
  28.  print "<B>Treść:</B><BR><TEXTAREA NAME="srodek" ";
  29.  print "ROWS=10 COLS=60>$srodek</TEXTAREA><BR>";
  30.  print "<INPUT TYPE="submit" VALUE="dodaj" name="gd">";
  31.  print "</FORM>";
  32.  
  33.  
  34. if ($gd=='dodaj') { 
  35.  
  36.  
  37. $srodek = addslashes(nl2br(htmlentities($srodek))); 
  38.  $nick = addslashes(htmlentities($nick));
  39.  
  40. if ($tresc && $nick && $nick!=admin) {
  41. $zapytanie = "INSERT INTO komentarze (newsID, tresc, nick, "." data) VALUES ('$id', '$srodek', '$nick', "." NOW());";
  42.  $wynik = mysql_query ($zapytanie); 
  43. header("Location: url");
  44. }
  45. ?>
bigZbig
Wartosc id w formularzu tez mozna podmienic wiec ja bym rowniez te wartosc sprawdzil.
jorgus
Cytat(bigZbig @ 2.08.2006, 07:59 ) *
Wartosc id w formularzu tez mozna podmienic wiec ja bym rowniez te wartosc sprawdzil.


tzn jak ?
NetJaro
Może stworzyć formularz u siebie np. na localhost'ie odwołujący się do Twojego skryptu smile.gif Tzw. podmiana formularzy.
jorgus
acha no, a jak zabezpieczyć ? ktoś w poprzednim poście pisał 'sprawdzić', ale jak sprawdzić, srobić sesje dla id np. ?
bigZbig
Cytat(jorgus @ 2.08.2006, 09:14 ) *
tzn jak ?

Pytasz jak mozna podmienic, czy jak sprawdzic?
NetJaro
Aby sprawdzić, sprawdzasz, czy HTTP_REFER zawiera dane Twojego serwera ;-)
bigZbig
Mowiac sprawdzic mialem na mysli np. czy wartosc id jest liczba lub czy nie zawiera np. znaku srednika.
nospor
Oj panowie, nie pastwijcie sie nad chlopakiem.... winksmiley.jpg
Niech se poczyta:
http://forum.php.pl/index.php?showtopic=23258&st=0
http://forum.php.pl/index.php?showtopic=30056&st=0
Athlan
Cytat
Aby sprawdzić, sprawdzasz, czy HTTP_REFER zawiera dane Twojego serwera ;-)

chyba HTTP_REFERER smile.gif
a dokładniej $_SERVER['HTTP_REFERER'];

pozdraiwam smile.gif
jorgus
  1. <?php
  2. $_GET['id'] = mysql_escape_string(intval($_GET['id']));
  3. ?>


tak można to id przepuścić i bedzie ok ?

a tym REFEREM to nie wiem jak sad.gif


a reszta z tego kodu oprócz $id byłaby ok pod względem bezpieczeństwa ?
SongoQ
Referer da sie obejsc, wiec nie jest to dobrym rozwiazaniem.
Athlan
Cytat
Referer da sie obejsc, wiec nie jest to dobrym rozwiazaniem.


powiedz jak, jeżeli można... wiesz teraz myślę nad zabezpieczeniami i chce wiedzieć jak byś mógł obejść mój referer ?

pozdrawiam smile.gif
nospor
Cytat
powiedz jak, jeżeli można... wiesz teraz myślę nad zabezpieczeniami i chce wiedzieć jak byś mógł obejść mój referer
Ja przykladowo tego nie wiem, ale wiem, ze moj firewall blokuje REFERER, przez co dany serwer nie dostaje tego badziewia. I jak mi ktos kiedys stronke zabezbieczyl REFEREREM, to musialem firewall'a wylaczyc by polatac po formularzach.... bardzo wnerwiajace zabezpieczenie i zniechecajace do danej stronki. Bo zeby po niej polatac to musze miec wyłączonego FireWalla
Gość
Cytat
Ja przykladowo tego nie wiem, ale wiem, ze moj firewall blokuje REFERER, przez co dany serwer nie dostaje tego badziewia. I jak mi ktos kiedys stronke zabezbieczyl REFEREREM, to musialem firewall'a wylaczyc by polatac po formularzach.... bardzo wnerwiajace zabezpieczenie i zniechecajace do danej stronki. Bo zeby po niej polatac to musze miec wyłączonego FireWalla


no to jak polecacie, bo już zaczynałem się wgryzać w tego REFERER'a, ale skoro takie oproblemy to nie stosuje, więc jak najlepiej ?
SongoQ
Cytat
powiedz jak, jeżeli można... wiesz teraz myślę nad zabezpieczeniami i chce wiedzieć jak byś mógł obejść mój referer ?


W php wysylajac do serwera takie cos:

fputs($rSocketOpen, "Referer: http://forum.php.pl/r/n");

Patrz funkcja fopen - pisze jak byk w manualu.

Kolejny przyklad FF i odpowiednia wtyczka ma mozliwosc zmiany feferera. Nie wiem czy wiesz ale referer jest wysylany przez przegladarke a nie serwer.

A tak pozatym to polecam przeczytac rfc http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
jorgus
no tak jak to w końcu, co Wy używacie ? bo dalej nie wiem, linki przeczytałem, ale i tak nie wiem.

A tak zazwyczaj to jak to się zabepiecza ?
NetJaro
OK, dobra bo się czuje winny tongue.gif

Ew. możesz w formularzu na swojej stronie dać jakąś sesje ($_SESSION['formularz'] = true;) i sprawdzać czy ta sesja istnieje. Nikomu nie chce sie bawić w ten sposób, zwłaszcza, że mozna stworzyć bardziej skomplikowane nazwy i wartości sesji smile.gif
bigZbig
Chłopaki (przepraszam jesli wypowiadała tu się jakas kobieta) po co te sesje i referery? Chodzi o to aby na serwerze odbierac bezpieczne dane, do czego moim skromnym zdaniem wystarczy wyeskejpowac lub usunąc potencjalnie niebezpieczne znaki typu srednik, cudzyslowy itp. Moze w wyniku takich minimalistycznych dzialan dodam do bazy bzdury, ale nie utrace danych ani nie dopuszcze do wykonania niebezpiecznego kodu.
Athlan
@bigZbig - a mnie wkurza jak np mi wypełniaja formularz z cudzej strony i odwołuje się on do mojego linka, który zapisuje te dane... poza tym na tym polegją m.in. boty - maja formularz i jazda...

może te sesje jednorazowe to rzeczywiście niezły pomysł... tworzona zostaje przy wyswietleniu formularza i niszczona po akcjach nastąpionych po wykonaniu żądania (unset" title="Zobacz w manualu php" target="_manual)

co Wy na to? smile.gif
jorgus
napiszcie taki przykład z tymi sesjami w takim razie, bo boty to też nie dobra rzecz i gdzie to wsadzić w formularzu
Athlan
na przykład

form.php
  1. <?php
  2. $_SESSION['form'] = time();
  3. ?>
  4.  
  5. // formularz prowadzący do: dodaj_komentarz.php


dodaj_komentarz.php
  1. <?php
  2.  
  3. if($_SESSION['form'] < (time() - 600))
  4. {
  5. // akcja ...
  6. }
  7. else
  8. {
  9. // wiadomosc o niepowodzeniu
  10. }
  11. ?>


w powyższym przykładzie sesja otrzymuje czas wygenerowania formularza... nikt nie bedzie pisał komenatz dłużej niż 10 min, więc sprawszamy czy sesja nie posiada mniejszej wartości i czy wogóle ja ma smile.gif

pozdrawiam smile.gif

(pisane z palca)
bigZbig
Zabezpieczenie przed botami to juz inna sprawa, ale napisz mi prosze Athlan jak by sejse mialy chronic przed botami?
jorgus
@Athlan ok dzięki, a jak ma to zabezpieczać, tzn. przed czym. Ja rozumie wedle tego, że przed tym, żeby nikt nie ślęczał za długo nad formularzem. Mnie się rozchodzi od początku gdzie zamieściłem kod o jego bezpieczeństwo i tam pojawiły się głosy, że $id jest przekazywana w taki sposób że może zostać to wykorzystane do niecnych celów.

tutaj natomiast przestawiasz kod, który i tak co prawda wykorzystam, ale czy on również rozwiązuje kwestie tego $id ?
A może to $id powinienem przesyłać w sesji ?
Athlan
~jorgus a ja teraz mówie o kwestji miejsca, w którym ów formularz jest zamieszczony... formularz zostanie przyjęty tylo z tej strony, z której sesja zotsała wysłana smile.gif czyni nie z zewnątrz smile.gif

@bigZbig:
Cytat
napisz mi prosze Athlan jak by sejse mialy chronic przed botami

nie wiem czy dobrze rozumuje, ale czytelm gdzies, ze najczesciej boty sa robione w javascript i maja wbudowany formularz ktory wysylaja za pomocą JS: ducument.forms[0].submit()
poza tym boty chyba nie robią sesji na serwie - ale tu nie jestem pewien smile.gif i szczerze w to wątpie (śiat byłby piękny tongue.gif )

pozdrawiam smile.gif

ps: ciacho jest przetrzymywane u usera a sesja na servie smile.gif
jorgus
no teraz to kumam, a odnśnie innych błędów w kodzie z pierwszego postu mógłby się ktoś odnieść ?
Athlan
~jorgus:
Temat: SQL Injection Insertion
bigZbig
Cytat(Athlan @ 2.08.2006, 16:10 ) *
ps: ciacho jest przetrzymywane u usera a sesja na servie smile.gif


@Athlan - a identyfikator sesji gdzie jest przetrzymywany po stronie usera?
Pucy
Ja uwazam, ze jezeli nie wiecie jak dzialaja dokladnie botki, czy tworza sesje czy jej nie tworza, to powinniscie sie jednak bardziej skupic na tresci jaka zostanie wyslana. Co wam przyjdzie po zludnych zabezpieczeniach jezeli zostanie napisany taki bocik, ktory i tak to w jakis sposob obejdzie. A czasami warto wrocic do korzeni, zabezpiczeczajac tresc jakakolwiek zostalaby wyslana przez usera czy bota... wiecej roboty? watpie...
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.