Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ominięcie działania skryptu przez odniesienie się do niego dzięki url
Forum PHP.pl > Forum > PHP
plastus321
Witam wszystkich : )

Nie wiem czy dobrze zatytułowałem mój problem ale jeśli nie to postaram się chociaż go dobrze przedstawić w tym opisie.

Sprawa wygląda tak...


Mam skrypt przykładowo o nazwie "dodaj_do_bazy_danych.php" w którym jest napisany kod który coś dodaje do mysql przy pomocy pobrania metodą $_POST['costam'] z pliku "dane_do_bazy_danych.php".


Wszystko śmiga pięknie jak ktoś uzupełni formularz itd. ale jeśli ktoś się odniesie bezpośrednio do pliku przez wpisanie linku: "http://www.mojastrona.pl/dodaj_do_bazy_danych.php" rekord zostaje dodany...

pytanie moje brzmi:

Czy da się temu zapobiec dzięki plikowi na serwerze .htaccess żeby np. ignorował ten link przez wpisanie go bezpośrednio i np. odsyłał na stronę główną bez żadnego powiadomienia oraz żeby skrypt nie zadziałał? Czy trzeba jednak otwierać wszystkie pliki które coś dodają do mysql i dodawać pewną instrukcje if która sprawdzi czy w formularzu zostały wszystike potrzebne dane do wstawienia rekordu podane?


Z góry dziękuje wszystkim za odpowiedzi ; )
filipsiu
Tak da się, w pliku z formularzem na samej górze dajesz
  1. defined('IN_SITE', true);
  2. if(!defined('IN_SITE')
  3. die('brak uprawnień')

oraz w pliku z dadaniem do bazy
  1. defined('IN_SITE', false);
  2. if(!defined('IN_SITE')
  3. die('brak uprawnień')

lub robisz to w 1 pliku z warunkiem do dodania oraz
if(isset($)POST['wyslij']))
markonix
@up
od kiedy to stałe tak sobie po prostu przechodzą ze strony na stronę?

Słuszne rozwiązanie to sprawdzenie czy formularz został wysłany.
Robi się to za pomocą isset na dowolnym polu z formularza czy nawet na przycisku (jeśli ma name to także wysyła on wartość).
Jeżeli nie jest utworzone to wywołanie jest manualne i nie powinno powodować żadnej akcji.
pr0woKator
W formularzu dodaj

  1. <input type="hidden" name="wyslany" />


w skrypcie sprawdź to za pomocą:

  1. if(isset($_POST['wyslany'])){
  2. // tutaj skrypt wykonuje to co chcesz
  3. } else {
  4. // jeżeli nie jest wysłany formularz
  5. header ("Location: index.php"); // przekierowanie na stronę główną
  6. }
daniel1302
Nie rozumie po co dodawać ukryte pola?
@markonix powiedział dobrze.

sprawdzasz sobie istniejące już pole(wysyłane)
  1. if (isset($_POST['jakies pole']))
  2. {
  3.  
  4. }


Jak dodajesz niesprawdzany rekord do bazy danych, nie chciałbym mieć u siebie na serwere takiego skryptu, SQL Injection i wgl
plastus321
Dzięki za rady skorzystam na pewno z tych dwóch opcji ; ) tak właśnie myślałem że z tymi isset to chyba najlepsze wyjście ale no jednak miałem jakąś nadzieję : ) ale z tym defined też spróbuję : ) jak na razie temat do zamknięcia i jeszcze raz dzięki all : )
markonix
Sposób z defined jest nieprawidłowy, przynajmniej w takiej formie bo faktycznie można z niego skorzystać ale gdy includujemy pliki.
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.