Skocz do zawartości

Jak zabezpieczyć skrypt?


THI

Rekomendowane odpowiedzi

Witam,

Napisałem skrypt który działa w następujący sposób:

Jest formularz gdzie gość podaje różne dane, powiedzmy:

Dane:

Kod SMS:

Jeżeli kod SMS jest poprawny, to dane z formularza są wpisywane do bazy danych.

Zapytanie do bazy po podaniu poprawnego kodu SMS wygląda mniej wiecej tak:

$zapytanie = "INSERT INTO `baza`.`tabela` (`id` ,`username` ,`password` ,`access` ,`flags` ,`steamid` ,`nickname` ,`ashow` ,`created` ,`expired` ,`days`) VALUES ('', '{$_POST['username']}', '{$_POST['password']}', 'b', 'b', '{$_POST['steamid']}', '{$_POST['nickname']}', '1', '1285272828', '1287864828', '30') ";

Po wykonaniu tego zapytania SQL, mogę odświeżyć stronę co powoduje dodanie tego samego wpisu do bazy..

Chcę aby skrypt wykonał się tylko raz. A następnie wyświetlał -brak dostępu-

Do sprawdzania poprawności kodu SMS wykorzystuje skrypty z DotPay..

<?php

$id = XXX;			  # numer ID zarejestrowanego klienta
$code = "XXX";		# identyfikator usług SMS
$type = "sms";		  # typ konta: C1 - 8 znakowy kod bezobsługowy
		   # typ konta: sms dla sprawdzania SMSow
$page = "zapytanie.php";	# nazwa pliku jaki ma sie zaladowac po podaniu poprawnego kodu
$del=1;   # jeżeli kod ma być skasowany od razu po sprawdzeniu to ustaw wartość na 1
################################################################################
#
$check = $_POST['check']; # podany kod na stronie gdzie wejście jest płatne i wymagany jest zakupiony kod
if($check == NULL)
 exit("Prosze wpisac kod");


$handle = fopen("https://dotpay.pl/check_code.php?id=".$id."&code=".$code."&check=".$check."&type=".$type."&del=".$del, 'r');
$status = fgets($handle, 8);
$czas_zycia = fgets($handle, 24);
fclose($handle);
$czas_zycia = rtrim($czas_zycia);


if ($status == 0) {print "Kod niepoprawny."; exit;}  # gdy kod niepoprawny
else 
{  # gdy kod poprawny:
if (!isset($_COOKIE['ActiveCode']))
{
	setcookie('ActiveCode',1, time()+$czas_zycia);
}
else 
{ 
	setcookie('ActiveCode',0, time()+2, "/");
	setcookie('ActiveCode',1, time()+$czas_zycia, "/");
}
header("Location: ".$page);		# włączenie strony głównej
}
?>

Nie prosze o gotowe kody, proszę o wskazówki.

Pozdrawiam

a9177b36246d7ce96fa698c9971dd36b.png

Sprzęt akwarystyczny kupuj w moim - sklep akwarystyczny.

adwokat częstochowa - Radca prawny Grzegorz Ledwoń. Pomoc w sprawie odszkodowania.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak chcesz, żeby się skrypt wykonywał tylko raz to po sprawdzeniu kodu zrób redirect albo zapisuj wykorzystane kody do bazy. Z tym, że lepiej redirect... tak zawsze się robi.

Poza tym, takie zapisywanie dostępu w cookie. Każdy to obejdzie. Jak już koniecznie musi być cookie to zrób tablicę:

$salt = '$djf89vcxy$@IOJ';

$arr = ($kodsms, $expire);

$check = sha1(implode(',', $arr).$salt);

$arr[] = $check;

$cookie = base64_encode(serialize($arr));

Aha jeszcze ważna uwaga. Jak dajesz 30 minutowy dostęp do strony to nigdy nie robi się tego ustawiając czas życia cookie, bo zegary nie są synchronizowane. Jak na serwerze masz 12:15 a u użytkownika 12:25 to takie cookie będzie żyło 10 minut dłużej. Trzeba zapisywać mktime() albo expire w samym cookie, ustawić czas życia na kilka lat do przodu i porównywać na serwerze.

Odnośnik do komentarza
Udostępnij na innych stronach

Irek, faktycznie nie potrzebnie kierowalem się w stronę tego gotowego rozwiązania od DotPay.

Formularz przekazuje dane do tego pliku:

<?php

$id = XXX;		   
$code = "XXX";	  
$type = "sms";		  
$del = 1; 
$page = "index.php";

$check = $_POST['check'];
if($check == NULL)
 exit("Prosze wpisac kod");


$handle = fopen("https://dotpay.pl/check_code.php?id=".$id."&code=".$code."&check=".$check."&type=".$type."&del=".$del, 'r');
$status = fgets($handle, 8);

if ($status == 0) 
{print "Kod niepoprawny."; exit;}  # gdy kod niepoprawny
else 
{
// Tutaj wykona zapytania SQL
}

?>

i wszystko wykonuje się tak jak powinno.

Dzięki okazwłoka za to UNIQUE, przydało się ;)

a9177b36246d7ce96fa698c9971dd36b.png

Sprzęt akwarystyczny kupuj w moim - sklep akwarystyczny.

adwokat częstochowa - Radca prawny Grzegorz Ledwoń. Pomoc w sprawie odszkodowania.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeszcze mała anegdotka.

Nie polecam wstawiania do zapytania SQL bezpośrednio danych z $_POST. Trzeba dane najpierw zabezpieczyć. Poczytaj o SQL Injection. :)

Pozdrawiam

Klik - najlepszy Program Partnerski na ruch warezowy.

Klik - profesjonalne teksty na precle, zaplecza, synonimy i inne.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności