![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jakimi funkcjami powinno się przepuszczać dane z formularza, które później lecą do bazy? Czy zapis:
to zły zapis? wiem, że jest coś takiego jak mysql_real_escape() i inne, bo czytałem w necie i ktoś własnie użył sformułowania i inne. I dlatego pytam, jakie inne funkcje pomogą jeszcze przy filtracji danych? Jak jest najbezpieczniej filtrować dane? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Przepuszczać przez preg_match, filter_vars, rzutować typy. mysql_* sobie odpuść na rzecz PDO i bindowania parametrów. W jaki sposób wycięcie białych znaków miało by pomóc?
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej żadnymi. A jeśli już, to specjalnie do tego przeznaczonymi.
Jeśli będziesz używał rozszerzenia PDO, to możesz w ogóle zapomnieć o filtrowaniu i spokojnie spać. Za pomocą tzw. prepared statements możesz wysłać dane bezpośrednio z formularza do bazy nie martwiąc się, czy dane - intencjonalnie lub nieintencjonalnie - zawierają potencjalnie niebezpieczne znaki lub kod:
W ten sposób dane podane przez użytkownika znajdą się w tabeli w takiej formie, w jakiej zostały podane przez użytkownika, nie wpływając w żaden sposób na konstrukcję samego zapytania. Inaczej mówiąc, PDO uniemożliwia przeprowadzanie ataków SQL Injection. Rozszerzenie PDO jest rekomendowane do obsługi połączeń z bazą danych w przypadku PHP 5.*. Jeśli używasz starszych wersji PHP, to filtrowanie danych z formularzy możesz prosto załatwić jedną funkcją rozszerzenia mysqli - mysqli_real_escape_string:
Funkcja mysqli_real_escape_string jest specjalnie przeznaczona do filtrowania łańcuchów używanych w zapytaniach SQL. Zapis, który podałeś jest zły bo:
Co do 1 - już wiesz, o co chodzi. Co do 2 - nie chcemy zmieniać danych użytkownika. Chcemy, żeby te dane nie były niebezpieczne. Najlepiej zapisywać dane tak, jak są podane i formatować je na wyjściu. Formatowanie wejścia oznacza dodatkowe problemy przy formatowaniu wyjścia. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@bostaf: Przecież mysqli wspiera prepared statements, po co się babrać z ręcznym sklejaniem zapytań.
Ten post edytował Crozin 14.05.2012, 21:54:54 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
@Crozin No racja. Też bym takiego babrania nikomu nie polecał. Ale ze względów edukacyjnych dobrze wspomnieć o takich metodach. Zwłaszcza, że może przyjść czas, że taka wiedza się przyda. A każdy moment jest dobry, żeby czegoś nowego albo starego się nauczyć.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dlatego są zazwyczaj 2 etapy przygotowania danych: filtracja i walidacja. Filtracja na wstępie eliminuje niepożądane znaki (czyli tutaj idealnym przykładem może być właśnie trim), walidacja sprawdza ich poprawność. Dopiero po tym dane wrzucamy do bazy.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 29.05.2025 - 06:45 |