konto usunięte

Temat: Zabezpieczenie przed SQL Injection

Michał Jarosz:
Piotr Likus:
>
@Przemek: to samo możesz osiągnąć na poziomie PHP-a.
Wtedy zamiast "mysql_select" robisz w kodzie "getCustomerOrders()".

No nie jest to do końca to samo. W przypadku procedur składowanych, zapytania przechowywane są w postaci skompilowanej i nijak nie wstawisz do nich własnego SQL.

Ale nie o tym Przemek pisał...
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: Zabezpieczenie przed SQL Injection

No to nie wiem o czym pisał...

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

pisałem o zmianie procedury w taki sposób że zmiana struktury danych nie wpływa na wynik końcowy, a cała zmiana SQL-a odbywa się tylko w procedurze

a co co chodzi z getCustomerOrders?
Michał Stachura

Michał Stachura Dedykowane serwisy i
strony www -
http://santri.eu

Temat: Zabezpieczenie przed SQL Injection

Wojciech Małota:
Tak będzie bardziej "jazzy":

$query = $db->prepare('INSERT INTO baza_danych VALUES(:zmienna)');
$query->bindParam(':zmienna', $zmienna, PDO::PARAM_STR);
$query->execute();


W zupełności wystarczające i bezpieczne.Wojciech Małota edytował(a) ten post dnia 14.11.09 o godzinie 20:26
Odgrzebię nieco temat.
Wojtek jakiego PDO::PARAM_??? używasz dla pól typu 'text'?

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

PDO::PARAM_STR

Temat: Zabezpieczenie przed SQL Injection

Michał Stachura:
Odgrzebię nieco temat.
Wojtek jakiego PDO::PARAM_??? używasz dla pól typu 'text'?

Tak jak przedmówca napisał. Text to string więc PARAM_STR.
Michał Stachura

Michał Stachura Dedykowane serwisy i
strony www -
http://santri.eu

Temat: Zabezpieczenie przed SQL Injection

Szkoda. Wiąże się z tym pewna niedogodność ale im bezpieczniej tym niej wygodnie niestety :)

Temat: Zabezpieczenie przed SQL Injection

Michał Stachura:
Szkoda. Wiąże się z tym pewna niedogodność ale im bezpieczniej tym niej wygodnie niestety :)

Wyżej tyłka nie podskoczysz ;-)

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

Zastosowałem trochę inne rozwiązanie niż proponowane - klasa weryfikująca wprowadzane dane na bazie wyrażeń regularnych (stringi) i masek (np. dla pola kod czy sprawdzenie czy wartość jest liczbą).

Poza tym wartości z paska adresowego weryfikowane są pod względem dopuszczenia do wykonania (i np. jak z formularza idzie wartość ukryta o nazwie 'edycja' to sprawdzam czy takie coś może być w ogóle przez mechanizm parsujący przyjęte).

Inna sprawa dotyczy pól typu 'id', które są przesyłane często w pasku adresowym - przed wykonaniem muszą spełnić określone warunki (np. określona długość czy zawartość znaków lub suma kontrolna).

A mniej wygodnie jest tylko do pierwszego napisania dobrej klasy weryfikującej dane i jeśli programista pamięta o weryfikacji przyjmowanych danych.
Krzysztof Kotowicz

Krzysztof Kotowicz senior web
developer/system
architect,
Freelancing

Temat: Zabezpieczenie przed SQL Injection

W najbliższą środę w Krakowie jest spotkanie wspomnianego już w tym wątku OWASPu dla developerów PHP, właśnie m.in. o SQL injection. Czytając wpisy w tym wątku przekonuję się, że ciągle jest kilka mitów na ten temat, więc zapraszam zainteresowanych - na pewno skorzystacie!

Więcej info tu:

https://lists.owasp.org/pipermail/owasp-poland/2010-Mar...

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

Krzysztof Kotowicz:
W najbliższą środę w Krakowie jest spotkanie wspomnianego już w tym wątku OWASPu dla developerów PHP, właśnie m.in. o SQL injection. Czytając wpisy w tym wątku przekonuję się, że ciągle jest kilka mitów na ten temat, więc zapraszam zainteresowanych - na pewno skorzystacie!

Więcej info tu:

https://lists.owasp.org/pipermail/owasp-poland/2010-Mar...

A właśnie miałem to napisać ;).

Jeśli chodzi o zabezpieczenie przed sql injection, to jest tego trochę, bo ja jednak wolę bardziej globalnie, czyli przy okazji zabezpieczania przed sql injection zabezpieczam np. przed XSS-em.

Zazwyczaj robię coś na bazie prepare, dodaje sleshe, a tam gdzie nie trzeba usuwam wszelkie tagi i znaczki których nie powinno być.
Np. podczas logowania podajesz login i hasło, gdzie obydwa to zlepki liter i liczb. Więc wystarczy usunąć wszelkie znaki poza zadeklarowanymi.
Jakub L.

Jakub L. Programista

Temat: Zabezpieczenie przed SQL Injection

Darek Z.:
Np. podczas logowania podajesz login i hasło, gdzie obydwa to zlepki liter i liczb. Więc wystarczy usunąć wszelkie znaki poza zadeklarowanymi.

I w tej sytuacji hasło 123abc123 jest takie samo jak 123$%^a&b*c(1@23# ?
Stanisław P.

Stanisław P. Software designer

Temat: Zabezpieczenie przed SQL Injection

Darek Z.:
Jeśli chodzi o zabezpieczenie przed sql injection, to jest tego trochę, bo ja jednak wolę bardziej globalnie, czyli przy okazji zabezpieczania przed sql injection zabezpieczam np. przed XSS-em.
Co ma piernik do wiatraka? Jak można przed obydwoma bronić się tym samym sposobem?
Zazwyczaj robię coś na bazie prepare, dodaje sleshe
Czyli nie dość, że prepare odpowiednio obrabia zapytania, to jeszcze dodajesz slashe które są zapisywane jako slashe w bazie?
a tam gdzie nie trzeba usuwam wszelkie tagi i znaczki których nie powinno być.
Np. podczas logowania podajesz login i hasło, gdzie obydwa to zlepki liter i liczb. Więc wystarczy usunąć wszelkie znaki poza zadeklarowanymi.
Czyli jak chcę mieć bezpieczne hasło "(%@'jr!$@!&!';" to ktoś będzie się mógł zalogować wpisując "jr"? I nie mogę w Twoich aplikacjach pisać przykładów w html'u, bo zamiast poprawnie je wyświetlić, wytniesz je zupełnie? Tak samo jak "2<3 ale 3>2" zmieni się w "22"?

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

Jakub L.:

I w tej sytuacji hasło 123abc123 jest takie samo jak 123$%^a&b*c(1@23# ?

nie, podczas rejestracji pozwalam np. na rejestrowanie się używając znaków a-zA-z0-9 0 (ew. znaki _ . - itp (wyrzucając znaki których można użyć przy atakach)).

Podczas logowania sprawdzam wyrażeniem regularnym czy są tylko poprawne znaki, jeśli nie, formularz się nie przechodzi walidacji więc hasło jest niepoprawne.Darek Z. edytował(a) ten post dnia 05.03.10 o godzinie 10:58

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

jest bardzo prosta metoda zabezpieczenia :)
odebrać wszystkie uprawnienia i dać tylko na CALL \ EXECUTE dla procedur

durnego SELECT-a w procedurę i nie ma bata żeby to ktokolwiek przeskoczył za pomocą jakiegokolwiek stringu - bo i jak?
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Zabezpieczenie przed SQL Injection

Mam taki pomysł, aczkolwiek nie wiem czy dobry. Dlaczego nie zamienić wszystkich znaków specjalnych na reprezentację unicode? Np. " na \&\#34;. Można napisać prostą klasę przerabiającą znaki specjalne na unicode i odwrotnie.Michał Jastrzębski edytował(a) ten post dnia 05.03.10 o godzinie 12:55
Stanisław P.

Stanisław P. Software designer

Temat: Zabezpieczenie przed SQL Injection

Michał Jastrzębski:
Mam taki pomysł, aczkolwiek nie wiem czy dobry. Dlaczego nie zamienić wszystkich znaków specjalnych na reprezentację unicode? Np. " na \&\#34;. Można napisać prostą klasę przerabiającą znaki specjalne na unicode i odwrotnie.Michał Jastrzębski edytował(a) ten post dnia 05.03.10 o godzinie 12:55
Wszystko co potrzeba jest już dostępne: jeśli piszesz do bazy masz prepared queries, jeśli piszesz do usera masz html escaping. Czemu chcesz dodawać własny potencjalnie zbugowany kod zamiast sprawdzonych oficjalnych metod, które przeszły test czasu?
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: Zabezpieczenie przed SQL Injection

Właśnie wpadł mi to głowy pomysł na super rzecz. Wyobrażam to sobie mniej więcej tak:


Obrazek
Michał Jarosz edytował(a) ten post dnia 05.03.10 o godzinie 17:08

konto usunięte

Temat: Zabezpieczenie przed SQL Injection

Super, co to? Bo chcę dwa. :)Michał Wachowski edytował(a) ten post dnia 05.03.10 o godzinie 17:24
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: Zabezpieczenie przed SQL Injection

Piotr Likus:

addslashes() should be deprecated - it does not protect against
SQL injections

ale jest stosowane nie tylko przy zabezpieczaniu wejścia na zapytania SQL :)

Następna dyskusja:

Zabezpieczenie formularza p...




Wyślij zaproszenie do