Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]mysql_real_escape_string czy addslashes
Forum PHP.pl > Forum > Przedszkole
H4eX
Co jest lepsze do zabezpieczenia tekstu przesyłanego przez POST do bazy?
mysql_real_escape_string czy addslashes a może coś innego?
vtuner
Na pewno lepsze i bezpieczniejsze jest: mysql_real_escape_string
matiszon
sorry że się wpierdzielam do tematu ale czy zainkludowanie tego na każdej stronie będzie dobrym zabezpieczeniem?

  1. foreach ($_GET as $key => $val) {
  2. $_GET[$key] = mysql_real_escape_string($val);
  3. }
  4.  
  5. foreach ($_POST as $key => $val) {
  6. $_POST[$key] = mysql_real_escape_string($val);
  7. }
vtuner
Nie wiem po co nadpisujesz metody $_POST i $_GET. Poza tym zależy co dalej będziesz z tym robił. Mysql_real_escape_string nadaje się dobrze do bazy danych, ale w innym przypadkach bardzo dobre będzie htmlentities.
matiszon
No bo w postach i getach przekazywane sa dane do bazy.
vtuner
Cytat(matiszon @ 14.07.2010, 15:52:03 ) *
No bo w postach i getach przekazywane sa dane do bazy.


Dane do bazy są przekazywane w taki sposób jaki chcesz smile.gif
matiszon
No wiem ale czasami coś trafia przez post/get i warto przefiltrować to najpierw pod względem sql injection biggrin.gif
vtuner
Cytat(matiszon @ 14.07.2010, 16:02:46 ) *
No wiem ale czasami coś trafia przez post/get i warto przefiltrować to najpierw pod względem sql injection biggrin.gif


Dobrze, że mi powiedziałeś, bo nie wiedziałem biggrin.gif

Też pytam się po cholerę nadpisujesz $_POST i $_GET, a Ty mówisz, że tak się robi, to próbuje Cię wyprowadzić z tego złego nawyku.

Przechwytujesz tylko te wartości $_POST/$_GET, które potrzebujesz (po co całe?) a następnie filtrujesz i zapisujesz w zmienne $cleanVars (lub podobne, aby wiedzieć, że te zmienne przechowują przefiltrowane wartości) i wstawiasz sobie do bazy.
matiszon
Ale mi sie nie chce tongue.gif na każdej stronie dodawać po kilka:

$_POST['var1'] = mysql_real_escape_string($_POST['var1']);
$_POST['var2'] = mysql_real_escape_string($_POST['var2']);
$_POST['var3'] = mysql_real_escape_string($_POST['var3']);

Bo przecież w formularzy wysyłać będę nie kiedy więcej niż jedną wartość.
A tak to dam tamtą pętle w jakimś include które jest na każdej podstronie i po kłopocie biggrin.gif
vtuner
To po co się pytasz na forum, skoro wiesz lepiej?
zordon
jak uważasz, że walenie mysql_escape_string po wszystkich tablicach superglobalnych to odpal sobie taki skrypcik:

  1. <form action="" method="post">
  2. <input type="text" name="a" />
  3. <input type="submit" value="Zapisz" />
  4. </form>
  5. <?php
  6.  
  7. if(!empty($_POST)){
  8. echo 'bez mysql_escape_string: ' . $_POST['a'] . '<br />';
  9. echo 'z mysql_escape_string: ' . mysql_escape_string($_POST['a']) . '<br />';
  10. }


i w formularz wpisz coś z cudzysłowami, np "o'brien". I teraz pomyśl sobie, że wartość z formularza chcesz wyświetlić na ekran, nie zapisywać do bazy ...
ciągle ci się zdaje, że lepiej coś takiego dawać do wszystkiego? Lenistwo nie popłaca ...
Spawnm
zordon - niby jest stripslashes winksmiley.jpg
Co do dawania wszystkiego na starcie w escape to jednak mała pomyłka.
A jak jesteście leniuchy i nie chce wam się wszystkiego z osobna escapować to nauczcie się jakiegoś frameworka lub napiszcie sobie własny smile.gif
vtuner
Cytat(Spawnm @ 14.07.2010, 16:38:41 ) *
Co do dawania wszystkiego na starcie w escape to jednak mała pomyłka.


Mała? Według mnie to głupota.
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.