• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed php+pdo+mysql+kilka pytań odnośnie bezpieczeństwa

Object Storage Arubacloud
0 głosów
335 wizyt
pytanie zadane 28 czerwca 2015 w PHP przez niezalogowany
zamknięte 28 czerwca 2015

Mam taki oto kod:

$mysql_host = 'localhost';
$port = '3307';
$username = 'fryzjerka';
$password = 'XXXXXXXXXX';
$database = 'fryzjerka';

try	{
	$pdo = new PDO('mysql:host='.$mysql_host.';dbname='.$database.';port='.$port, $username, $password );
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	//---------------------------------

	//--- sprawdzenie czy user nie wysyła opinii zbyt wczesnie, na podstawie adresu ip
	//--- $pdo = zmienna pdo, $time = czas po jakim user moze wysłać opinie od ostatniego wysyłania (w sekundach)
	function wal($pdo, $time)
		{
		$wal_ = "true";
		$squery = 'SELECT data, ip FROM opinie WHERE ip="'.$_SERVER['REMOTE_ADDR'].'"';

		$stmt = $pdo->query( $squery );
		foreach($stmt as $row)
			{
			$ts_x = time();
			$data_sql = $row['data'] + $time;
			if( $row['ip'] === $_SERVER['REMOTE_ADDR'] && $data_sql >= $ts_x ) $wal_ = "false";
			}
		$stmt->closeCursor();
		return $wal_;
		}

	//--- sprawdzanie czy kliknięto submit na formularzu
	if ( isset($_POST['opinia']) && isset($_POST['ocena']) )
		{
		if ( wal($pdo, "60") == "true" )

			{

			$query = 'INSERT INTO `fryzjerka`.`opinie` (`opinia`, `ip`, `data`, `ocena`) VALUES (?,?,?,?)';

			$stmt = $pdo->prepare($query);

			$stmt->bindParam(1,$_POST["tresc"], \PDO::PARAM_STR);
			$stmt->bindParam(2,$_SERVER["REMOTE_ADDR"], \PDO::PARAM_STR);
			$stmt->bindParam(3,(new DateTime())->getTimestamp(), \PDO::PARAM_INT);
			$stmt->bindParam(4,$_POST["ocena"], \PDO::PARAM_INT);

			$stmt->execute();

	                $stmt->closeCursor();

			}


		}




	}
catch(PDOException $e)
	{
	echo 'Połączenie nie mogło zostać utworzone.<br />';
	}

 

Czy bindparam powinienem używać tylko do zapytań gdzie zmieniam coś w bazie czy lepiej do wszystkich zapytań?

Czy powinienem zamykać jakoś otworzone połączenie z bazą czy php jakoś sam je zamyka

Czy muszę używać $stmt->closeCursor(); ?

komentarz zamknięcia: OT

2 odpowiedzi

+1 głos
odpowiedź 28 czerwca 2015 przez Comandeer Guru (601,110 p.)
wybrane 28 czerwca 2015
 
Najlepsza

Najbardziej bezpieczna konfiguracja PDO: http://stackoverflow.com/a/60496

Czy bindparam powinienem używać tylko do zapytań gdzie zmieniam coś w bazie czy lepiej do wszystkich zapytań?

Do wszystkich, do których wkładane są dane - zwłaszcza te z zewnątrz! Np Twoje SELECT z odwołaniem do tablicy $_SERVER to potencjalne miejsce dla wykonania SQLi. No i w PDO zamiast bindParam zawsze można przekazać tablicę do execute, co jest IMO wygodniejsze.

Czy powinienem zamykać jakoś otworzone połączenie z bazą czy php jakoś sam je zamyka 

Sam zamyka, więc nie potrzeba tego robić. Ale jak pamiętasz o tym i dostawisz to na końcu to świat się nie zawali ;) 

Czy muszę używać $stmt->closeCursor(); ?

Osobiście nie zauważyłem, żeby cokolwiek się działo gdy tego nie zrobimy. Praktycznie nigdy tego nie użyłem i było OK ;)

komentarz 28 czerwca 2015 przez niezalogowany
wielkie dzięki
0 głosów
odpowiedź 28 czerwca 2015 przez SyntaxError Pasjonat (17,170 p.)
Powinieneś używać tego we wszystkich zapytaniach, w których jest wejście od użytkownika. ;)
komentarz 28 czerwca 2015 przez Comandeer Guru (601,110 p.)
W których jest jakiekolwiek wejście - polecam sobie sprawdzić co to jest SQLi drugiego stopnia ;)

Podobne pytania

0 głosów
1 odpowiedź 132 wizyt
0 głosów
2 odpowiedzi 1,015 wizyt
0 głosów
1 odpowiedź 584 wizyt

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...