Polski support
KohanaPHP Framework
FORUM Polskiego Supportu KOHANA Framework
29 Lipiec 2010, 13:02 *
Witamy, Gość. Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: 18.10.2009 - wydanie 3.0.1
Strony: [1]   Do dołu
  Drukuj  
Autor Wątek: XSS i SQL Injection + ORM  (Przeczytany 363 razy)
Ravgor
Nowy użytkownik
*
Offline Offline

Wiadomości: 9



Zobacz profil WWW
« : 9 Marzec 2010, 17:32 »

Witam. Zabezpieczam dane z formularza przez metodę Security::xss_clean(), jednak do bazy zapisują się wszystkie znaki jakie wpiszę (np. cudzysłowia, apostrofy). Kiedy zabezpieczałem dane przez mysql_escape_string(), przed znakami specjalnymi pojawiały się backslashe. Dlaczego tu się tak nie dzieje i jak sprawdzić, czy kod został zabezpieczony przez xss_clean() i rzeczywiście nikt mi się nie włamie do bazy?
« Ostatnia zmiana: 10 Marzec 2010, 15:59 wysłane przez Ravgor » Zapisane
nediam
Aktywny użytkownik
***
Offline Offline

Wiadomości: 186


Zobacz profil
« Odpowiedz #1 : 9 Marzec 2010, 19:05 »

Mylisz pojęcia mówisz o XSS Injection a masz na myśli SQL Injection. Przed XSS ta fankcja bardzo dobrze chroni Uśmiech Przed SQL Injection wcale Mrugnięcie
Zapisane

mck
NKTeam
Ekspert
*
Offline Offline

Wiadomości: 693



Zobacz profil
« Odpowiedz #2 : 9 Marzec 2010, 19:48 »

przed sql injection chroni defaultowe eskejpowanie zapytań, więc o to raczej nie trzeba się martwić
Zapisane
barat
Zaawansowany użytkownik
****
Online Online

Wiadomości: 332



Zobacz profil
« Odpowiedz #3 : 9 Marzec 2010, 20:54 »

Przed atakami SQL chroni Cie używanie Query Builder/ORM Uśmiech
Jest jeszcze escape()
Zapisane
Ravgor
Nowy użytkownik
*
Offline Offline

Wiadomości: 9



Zobacz profil WWW
« Odpowiedz #4 : 10 Marzec 2010, 15:58 »

Rzeczywiście pomyliłem rodzaje ataków. Zamiast xss_clean() użyję HTML::chars(), bo nie chcę w ogóle html'a w wyświetlaniu tekstu. Natomiast jeśli chodzi SQL injection, taki kod będzie bezpieczny?
$page ORM::factory('page')->find(1);
$page->url $_POST['url'];
$page->tresc $_POST['tresc'];
$page->tytul $_POST['tytul'];
$page->save();
Jeśli tak, prosiłbym o wytłumaczenie w jaki sposób się to dzieje, skoro w bazie przed apostrofami nie ma backslash'y.
« Ostatnia zmiana: 10 Marzec 2010, 16:00 wysłane przez Ravgor » Zapisane
barat
Zaawansowany użytkownik
****
Online Online

Wiadomości: 332



Zobacz profil
« Odpowiedz #5 : 10 Marzec 2010, 16:43 »

Rzeczywiście pomyliłem rodzaje ataków. Zamiast xss_clean() użyję HTML::chars(), bo nie chcę w ogóle html'a w wyświetlaniu tekstu. Natomiast jeśli chodzi SQL injection, taki kod będzie bezpieczny?
$page ORM::factory('page')->find(1);
$page->url $_POST['url'];
$page->tresc $_POST['tresc'];
$page->tytul $_POST['tytul'];
$page->save();
Jeśli tak, prosiłbym o wytłumaczenie w jaki sposób się to dzieje, skoro w bazie przed apostrofami nie ma backslash'y.

zamiast $_POST uzywaj biblioteki input - będziesz miał XSS z głowy Uśmiech
Co do zabezpieczenia bazy - po prostu QB/ORM nie przepuści ataków bo automatycznie quotuje wszystko jak trzeba - buduje zapytanie z klocków Uśmiech
A żeby były slashe to masz $db->escape() Uśmiech
Zapisane
Zepco
Administrator
Ekspert
*****
Offline Offline

Wiadomości: 924



Zobacz profil
« Odpowiedz #6 : 10 Marzec 2010, 17:13 »

zamiast $_POST uzywaj biblioteki input - będziesz miał XSS z głowy Uśmiech
Co do zabezpieczenia bazy - po prostu QB/ORM nie przepuści ataków bo automatycznie quotuje wszystko jak trzeba - buduje zapytanie z klocków Uśmiech
A żeby były slashe to masz $db->escape() Uśmiech

Nie wiem jak w KO3, ale w KO2 $_POST był filtrowany przez xss już w momencie inicjowania biblioteki input.
W KO3 jest biblioteka input? Z tego co widziałem, to $_POST i inne tego typu zmienne są czyszczone i można korzystać tylko z $this->request->post itp. Ale one chyba tylko są obrabiane ze slashy i nic poza tym.
Do XSS jest  
Security::xss_clean();

Prawdopodobnie tak jak w przypadku routingu deweloperzy doszli do wniosku (i w sumie słusznie), że filtrowania dokonasz na poziomie walidacji.
« Ostatnia zmiana: 10 Marzec 2010, 17:16 wysłane przez Zepco » Zapisane

OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --
(: nʞnʞ
Ravgor
Nowy użytkownik
*
Offline Offline

Wiadomości: 9



Zobacz profil WWW
« Odpowiedz #7 : 11 Marzec 2010, 12:18 »

Żeby zabezpieczyć $_POST przed XSS'em, wystarczy dodać taką linijkę:
$_POST Security::xss_clean($_POST);
Natomiast ja bardzo się przyzwyczaiłem do zabezpieczania przed XSS'em przy wyświetlaniu danych, a nie zapisywaniu.

@barat
Właśnie nie wiedziałem co ten ORM robi, żeby zabezpieczyć się przed SQL inj. Teraz mi to trochę rozjaśniłeś. IMHO ORM tworzy takie zabezpieczenia jak phpMyAdmin, czyli np. z zapytania
UPDATE `pagesSET `napis` = 'O'Connor WHERE `id` =1
tworzy
UPDATE `pagesSET `napis` = 'O''Connor' WHERE `id` =1
czyli przed znakiem apostrofu dodaje drugi apostrof.

Wielkie dzięki wszystkim za pomoc Uśmiech.
Zapisane
Zepco
Administrator
Ekspert
*****
Offline Offline

Wiadomości: 924



Zobacz profil
« Odpowiedz #8 : 11 Marzec 2010, 12:31 »

Żeby zabezpieczyć $_POST przed XSS'em, wystarczy dodać taką linijkę:
$_POST Security::xss_clean($_POST);
Natomiast ja bardzo się przyzwyczaiłem do zabezpieczania przed XSS'em przy wyświetlaniu danych, a nie zapisywaniu.

A co w przypadku gdy pod jakąś zmienną posta będzie tablica?
W sumie to sam post też jest tablicą, a ta funkcja działa zdaje się tylko na stringi.
« Ostatnia zmiana: 11 Marzec 2010, 12:43 wysłane przez Zepco » Zapisane

OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --
(: nʞnʞ
Maciek
Zaawansowany użytkownik
****
Online Online

Wiadomości: 399



Zobacz profil
« Odpowiedz #9 : 11 Marzec 2010, 12:51 »

A co w przypadku gdy pod jakąś zmienną posta będzie tablica?
W sumie to sam post też jest tablicą, a ta funkcja działa zdaje się tylko na stringi.
Nie ma obawy, działa też rekurencyjnie dla tablic i obiektów (źródło).
Zapisane
Zepco
Administrator
Ekspert
*****
Offline Offline

Wiadomości: 924



Zobacz profil
« Odpowiedz #10 : 11 Marzec 2010, 12:55 »

Musieli to niedawno poprawić, bo ja tego nie mam w źródle. Uśmiech W takim razie nie było pytania. Chichot

Edit:
Poprawka była 4 grudnia. Chichot No to jestem trochę do tyłu. Chichot
Zapisane

OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --
(: nʞnʞ
Strony: [1]   Do góry
  Drukuj  
 
Skocz do: