Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie formularzy
Forum PHP.pl > Forum > PHP
bartek
Mam takie pytanko :
Mam strone form.php i wstaw.php.
Na form.php jest formulaz ktory wysyla dane do wstaw.php (strona ta wstawia wartosci z form.php do tabeli mysql).
Jak zrobic aby wstaw.php dodawalo do sql'a tylko dane z form.php a nie jakiegos innego formulaza z innej strony (tylko prosze mi to wyjasnic metodą łopatologiczną bo jestem cienki w php winksmiley.jpg )

Pozdrawiam,
Bartek
kryr
Sprawdzasz, czy zmienna $_SERVER['HTTP_REFERER'] to adres strony z formularzem.
np:
Kod
if($_SERVER['HTTP_REFERER'] == 'form.php')

{

print('Dodaj do bazy');

}

else

{

print('Nie dodawaj');

}

Ale to latwa do ominiecia metoda, choc dosc skuteczna...
Seth
Mozna by stworzyc jakas zmienna generowana podczas tworzenia formularza zakodowac ja i umiescic w <input type="hidden" name="jakas_zmienna" value="zakodowana_wartosc">

Zakodowana_wartosc to np data(bez czasu) stworzenia formularza i jakis tekst - dowolny.
Potem jezeli odkodowana wartosc zgadza sie z data i dodanym (dowolnym) tekstem to oznacza, ze jest ok biggrin.gif

Najprostsza funkcja do kodowania i dekodowania to:
Kod
function x_Encrypt($string, $key){

for($i=0; $i<strlen($string); $i++){

for($j=0; $j<strlen($key); $j++){

$string[$i] = $string[$i]^$key[$j];

}

}

return $string;

}



function x_Decrypt($string, $key){

for($i=0; $i<strlen($string); $i++){

for($j=0; $j<strlen($key); $j++){

$string[$i] = $key[$j]^$string[$i];

}    

}

return $string;

}
bartek
Seth, nie za bardzo rozumiem o co Ci chodzi.
Co dokladnie ma byc umieszczone w value ?
Wogle nie zabardzo kapuje jak to zrobic smile.gif
Seth
Chodzi o to aby stworzyc jakas niepowtarzalna wartosc znana tylko twojej stronie, ktora by pozwalala odroznic posta z innego formularza od posta z twojego.
Tak np jest w bramce SMS'owej Ery - jest dodatkowa wartosc generowana przy tworzeniu formularza i bezniej nie wysle sie sms'a.
Mam nadzieje, ze juz cos sie wyjasnilo jezeli nie to... hmm... to trudno :wink:
bartek
Ok Seth, juz kapuje o co biega smile.gif
Teraz tylko mi wytlumacz jak to zrobic smile.gif

Pozdrawiam,
Bartek
castor
Co ty tam chcesz chronic questionmark.gifquestionmark.gif

Wiedz jedno ze co bys nie zrobil to i tak tego nie zabezpieczysz.

Oczywiscie dla poczatkujacych programistow bedzie to utrudnienie ale lekko zaawansowanym jest bez roznicy czy sprawdzisz referera czy wygenerujesz losowo jakis numerek itd.

Wiec zastanow sie czy to ma sens :?

Ja bym zrobil refererka i styka bo jezeli ktos juz zacznie manipulowac naglowkiem to i te wylosowany ciag znakow nie pomoze :wink:
Seth
Cytat
Ja bym zrobil refererka i styka bo jezeli ktos juz zacznie manipulowac naglowkiem to i te wylosowany ciag znakow nie pomoze :wink:

Prawde mowiac to wszystko sie da obejsc.
Ale wspomniana przezemnie ERA jakos nie podchodzi do tego tak sceptycznie jak ty castor :wink:
castor
No i co im to daje questionmark.gif?

NIC

laugh.gif laugh.gif laugh.gif laugh.gif
Seth
Wiadomo, ze doswiadczony programista kazde zabezpieczenie predzej czy pozniej zlamie ale tu chyba chodzi o poczatkujacych.
A zreszta... hmmm :? .... moze rzeczywiscie nie jest to najlepszy pomysl.
Ale akurat taki przyszedl mi do glowy.
bartek
Macie racje, skozystam z 'HTTP_REFERER' bo z hakierami nie bede mial do czynienia smile.gif.
A zabezpieczyc mi to trzeba jakby przypadkiem ktos wpisal www.mojastrona.pl/wstaw.php zeby nie wstawilo pustych rekordow (wiem ze sie da inaczej ale ... :?: )

Pozdrwiam,
Bartek
kryr
Pomysl Seth'a jest bardzo dobry, jezeli ukryta wartosc tworzyc na podstawie daty, to co godzine bedzie inna, a jezeli zastosuje sie jakies
mocniejsze kodowanie - ciezko sie bedzie domyslec, w jaki sposob powstaje ta wartosc...
np:
Kod
$WartoscDoHidden = crypt(date('MYDH'),'Az');

i przy odbiorze formularza sprawdzic:
Kod
if($WartoscZFormularza == crypt(date('MYDH'),'Az'))

Co do pustych rekordow, to wystarczy sprawdzic czy po prostu cos jest w wyslanych zmiennych... (o wiele latwiejsza metoda)
bartek
Kryr, mozesz mi dokladniej wytlumaczyc co i gdzie wstawic? Bo ja sie dopiero ucze ... :oops:
A co do sprawdzania pustych rekordow, to jak to zrobic ? :?: :oops:
castor
Cytat
Pomysl Seth'a jest bardzo dobry, jezeli ukryta wartosc tworzyc na podstawie daty, to co godzine bedzie inna, a jezeli zastosuje sie jakies
mocniejsze kodowanie - ciezko sie bedzie domyslec, w jaki sposob powstaje ta wartosc...


Sposobow na generowanie losowej wartosci jest mnostwo!

ale po co komu sie domyslac jak jest ta wartosc?questionmark.gif

Jesli chce wyslac wiadfomosc przez taki formularz to wyjme te wartosc z formularz i wstawie do przesylki :wink:

Oczywiscie mozna kombinowac generowac wartosci losowe np. z trzy jak masz zamieszany kod html to inputy pochowac w innych miejscach a nie przy formularzu itd.

Ale ja uwazam ze to na nic. coockie i referer to starczy bo po co se kompliowac skrypt jesli jak jz pisalem u gory ktos zacznie bawic sie naglowkiem i wyciagnie te coockie i wstawi referera to i te wartosci nie stana mu na drodze 8)

A co do wstawianie postych rekordow to ja cie nie rozumiem :?

przeciez jesli masz w skrypcie wstaw cos takiego:
Kod
if(!$HTTP_POST_VARS){

header("Location:formularz.php");

}



to jesli ktos wpisze adres w przegladarce
www.twojhost.pl/wstaw.php

to sie nic nie stanie bo nie ma zmiennych i go przeniesie na strone z formularzem

oczywiscie mozesz jeszcze w skrypcie sprawdzac zawartosc kazdej pojedynczej zmiennej i jesli jest posta to jej nie wstawjaj:

Kod
if!($HTTP_POST_VARS['twoja_zmienna']==""){

   tu kod wstawiena

}



proste przyklady ale o takie prosiles :wink:
Seth
Mam male pytanie do bartka: czy strona na ktorej chcesz umiescic ten skrypt jest komercyjna lub ma bardzo duzo odwiedzin lub jest z jakis przyczyn zagrozona atakami czy wlamaniami :?:
Jezeli nie, to pytam sie, po co Ci takie zabezpieczenie :?: :?: :?: :?:
bartek
Seth, nie jest komercyjna ale jakies minimalne zabezpieczenia zawsze sa potrzebne smile.gif
kryr
Jezeli chodzi Ci o to, zeby nie bylo "pustych" wpisow w bazie, to wystarczy sprawdzic, czy wszystkie dane z formularz sa wyslane...
Daj spokoj z takimi zabezpieczeniami...
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.