Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]używanie real_escape_string dla danych wysyłanych z formularza
radziopoke
post 9.04.2013, 08:24:55
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 14
Dołączył: 2.06.2010

Ostrzeżenie: (0%)
-----


Często na stronach mam różne formularze najczęściej dane z nich wysyłane są metodą post.

Słyszałem już nie raz że jeżeli takie dane chcemy przesłać do bazy MySQL należy użyć funkcji real_escape_string by zabezpieczyć się przed włamaniem. No i tu pojawia się problem gdyż wysyłane dane na jednym serwerze potrzebują tej funkcji na innym tylko to przeszkadza.

Przykład
w formularzu wpisałem:
coś tam ' i coś innego

Wiadomo, że znak ' powinien zostać "zabezpieczony" lecz nie wiedzieć czemu na jednym serwerze taki tekst wysłany metodą post(nie wiem jak jest z get) jest przekazany w tablicy post jako: coś tam \' i coś innego (oczywiście wypisanie tego na ekranie nie pokarze nam slesha)
Lecz jeżeli chciałbym wysłać taki tekst do bazy i potraktuję to jeszcze za pomocą real_escape_string to przy wypisaniu danych z bazy widnieje na ekranie tekst z \'

Jednak niektóre serwery (przynajmniej tak chyba kiedyś było) nie miały tak zabezpieczonych danych i bez real_escape_string wyskakiwał błąd zapytania.

Ciekawię się czy teraz wszędzie tak jest, że dane wysłane z formularza są tak zabezpieczanie, a jak nie to jak stworzyć kod by na każdym serwerze działał dobrze?
Go to the top of the page
+Quote Post
Michael2318
post 9.04.2013, 08:40:47
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


Zadaniem wszystkich funkcji chroniących przed SQLI jest właśnie zamiana apostrofów ( ' ) na postać ( \' ).
Możesz użyć innych funkcji do zabezpieczeń: http://majkelo.pl/php-mysql-bezpieczenstwo...ection,vp16.htm
Go to the top of the page
+Quote Post
radziopoke
post 9.04.2013, 09:00:38
Post #3





Grupa: Zarejestrowani
Postów: 125
Pomógł: 14
Dołączył: 2.06.2010

Ostrzeżenie: (0%)
-----


Np. na home.pl jeżeli próbuje np wysłać przez formularz coś w stylu:

Kod
jakiś tekst ' coś dalej


a zapytanie wygląda tak:
  1. $dane = $mysqli->real_escape_string($_POST['login']);
  2. $query = "SELECT * FROM `table` WHERE user='".$dane."'"
  3. //wysłanie zapytania itp
  4. //...
  5.  
  6. //po wszystkim
  7. echo $query;


w efekcie otrzymuję błąd, a funkcja echo wyświetla:
Kod
SELECT * FROM `table` WHERE user='jakiś tekst \\' coś dalej'

widać tu dwa slashe.
jednak gdy wyślę(bez zabezpieczeń):
  1. $query = "SELECT * FROM `table` WHERE user='".$_POST['login']."'"

zapytanie wykonuje się poprawnie. wynik:
Kod
SELECT * FROM `table` WHERE user='jakiś tekst \' coś dalej'


To tak jakby wysłane dane przez formularz same się zabezpieczyły. Ale czy tak jest na każdym serwerze? Wątpię. Dlatego chciałbym się dowiedzieć jak sprawdzić czy dane wysłane przez formularz są już zabezpieczone?
Go to the top of the page
+Quote Post
Michael2318
post 9.04.2013, 09:05:45
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
Cytat
Kiedy PHP był jeszcze niewielkim projektem, ktoś wpadł na pomysł wspomożenia programistów i wymyślił tzw. magic quotes. Opcja ta, jeżeli jest włączona, powoduje, że we wszystkich danych z tablic $_GET, $_POST oraz $_COOKIE apostrofy są automatycznie poprzedzane backslashem, dzięki czemu nie trzeba się tym zajmować samodzielnie.

Podsumowując, masz tam włączone magic_quotes.
A czy tak jest na każdym serwerze - zależy czy jest włączone i tyle.
Ja bym to wyłączył i sam zabezpieczał dane. Jak wyłączyć, tutaj: http://tosiek.pl/wylaczenie-magic_quotes_g...quotes_runtime/

Ten post edytował Michael2318 9.04.2013, 09:18:06
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 01:01