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

Sql Injection Wyrażenia Regularne

Object Storage Arubacloud
+1 głos
459 wizyt
pytanie zadane 3 czerwca 2021 w PHP przez karoloo Użytkownik (530 p.)

Witam. Zastanawiam się czy takie wyrażenia regularne w formularzu rejestracji wystarczą do zabezpieczenia przed sqlinjection, czy należało by coś jeszcze dodać. Z góry dziękuje za odpowiedź :)

<?php
    if(isset($_POST['login']) && isset($_POST['password']) && isset($_POST['repassword']) && isset($_POST['email'])){
        $login = $_POST['login'];
        $haslo = $_POST['password'];
        $haslo2 = $_POST['repassword'];
        $email = $_POST['email'];

        // Walidacja danych
        $errorLogin = false;
        $errorPass1 = false;
        $errorPass2 = false;
        $errorEmail = false;
        $error = false;
        $errorMessageLogin = "Login powinien zawierac od 3 do 15 małych liter, bez znaków specjalnych!";
        $errorMessagePass1 = "Hasło powinno zawierać od 5 do 30 znaków!";
        $errorMessagePass2 = "Hasła nie są identyczne!";
        $errorMessageEmail = "Niepoprawny E-mail!";

        // Login
        $wzorzecLogin = "/^[a-z]{4,16}$/";
        if(preg_match($wzorzecLogin,$login)){

        }else{
            $errorLogin = true;
            $error = true;
        }

        //Hasło
        $dlugoscHasla = strlen($haslo);
        echo $dlugoscHasla;
        if($dlugoscHasla>30 || $dlugoscHasla<5){
            $errorPass1 = true;
            $error = true;
        }
        // Hasło2
        if($haslo!=$haslo2){
            $errorPass2 = true;
            $error = true;
        }
        //E-mail
        $wzorzecEmail = '/^([a-z|A-Z|0-9]{4,20})@([a-z|A-Z|0-9]{2,10})\\.(pl|gr|com)$/';
        if(preg_match($wzorzecEmail,$email)){
            echo 'poprawny';
        }else{
            $errorEmail = true;
            $error = true;
        }


        // Koniec Walidacji
        
    }
?>

 

2 odpowiedzi

+1 głos
odpowiedź 3 czerwca 2021 przez _Pita_ Stary wyjadacz (11,410 p.)
wybrane 12 czerwca 2021 przez karoloo
 
Najlepsza
Twoja ochrona polega na możliwości wpisania wyłącznie tych znaków: "/^[a-z]{4,16}$/" . Z tego co rozumiem ten kod, wpisanie tradycyjnego " abc' OR 1=1 -- " ze względu na duże litery rzeczywiście niewiele da, ale za to nie będzie można używać wielkich liter co jest dość wysoką ceną....

Polecam użyć chociaż funkcji htmlentities() lub bliźniaczej - htmlspecialchars() a następnie mysqli_real_escape_string()

Nie jest to świetna obrona, ale na pewno lepsza...
komentarz 3 czerwca 2021 przez Comandeer Guru (601,110 p.)
Ale wycięcie encji HTML nie za bardzo pomaga na SQL injection (np. podany przez Ciebie string nie ma nic, co zostanie wycięte).

Samo wycięcie dużych liter też nie daje jakiejkolwiek ochrony, bo SQL jest case-insensitive.
komentarz 4 czerwca 2021 przez Comandeer Guru (601,110 p.)

Jak już używasz mysqli_real_escape_string, to nie musisz robić dodatkowej filtracji, bo nijak to nie wpłynie na bezpieczeństwo bazy danych. Zresztą i tak o wiele lepiej użyć prepared statements.

komentarz 4 czerwca 2021 przez _Pita_ Stary wyjadacz (11,410 p.)

A czy gdyby ustawić funkcję htmlentities() na ENT_QUOTES, czy w przypadku przytoczonego stringa, czy nie zostałoby "wykonane" bezużyteczne dla hakera:

" abc &#039 OR 1=1 -- "?

Edit: Fakt, w obliczu mysqli_real_escape_string() nie za dużo to zmieni, ale jak wiesz taki był mój pierwotny zamysł, więc zdecydowałem się zostawić obie te funkcje.

komentarz 5 czerwca 2021 przez Comandeer Guru (601,110 p.)

A czy gdyby ustawić funkcję htmlentities() na ENT_QUOTES, czy w przypadku przytoczonego stringa, czy nie zostałoby "wykonane" bezużyteczne dla hakera:

" abc &#039 OR 1=1 -- "?

 W teorii tak. Tylko że sposobów na zrobienie SQLi jest cała masa. I któryś w końcu zadziała.

+6 głosów
odpowiedź 3 czerwca 2021 przez adrian17 Ekspert (344,860 p.)
Nie, podchodzisz do tego od kompletnie złej strony :(

Po pierwsze, Twoja walidacja jest w najlepszym przypadku kontrowersyjna, w najgorszym bezsensowna. Same małe litery w loginie? Max 30 znaków hasła? Walidacja maila jest taka sztywna, że nie przepuści jan.kowalski@gmail.com albo @morele.net . Po co to wszystko, jak są gotowe funkcje do walidowania maila (ale wielu też uważa, że najprostszą walidacją jest tylko sprawdzić czy ma małpę po czym po prostu spróbować wysłać maila na ten adres - jak user aktywuje konto tym mailem, to walidacja z definicji przeszła :) ).

Po drugie, nic co tutaj napisałeś nie ma związku z poprawnym zabezpieczeniem przed SQL injection. Wszystko co musisz zrobić to bindować argumenty zamiast sklejać stringi - i tyle, koniec. Walidacja może się przydać do innych celów, ale nie do tego.
1
komentarz 3 czerwca 2021 przez Comandeer Guru (601,110 p.)

Podobne pytania

0 głosów
1 odpowiedź 144 wizyt
pytanie zadane 3 czerwca 2020 w PHP przez Klaudiaaa Początkujący (390 p.)
0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 24 kwietnia 2018 w PHP przez Browarnik123 Użytkownik (830 p.)
+1 głos
1 odpowiedź 244 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...