Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][HTML] umieszczanie nazw tabel w HTML a bezpieczeństwo?
xajart
post 5.11.2009, 16:09:49
Post #1





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Kiedyś robiłem pewą stronke i dzisiaj postanowiłem, że zoptymalizuje w niej kog źródłowy, zwłaszcza w AJAX (plik JS), bo kilkakrotnie miałem ten sam kod powielany który różnił się tylko parametrami zczytywanymi. 

Zrobiłem to dość uniwersalnie tak że wszystkie dane z PHP przekazuje do kodu HTML a skrypt je sobie pobiera poprzez DOM i odpowiednio przetwarza oraz dokonuje ewentualnie aktualizacji w MySQL. 

I na tym etapie zadałem sobie pytanie czy bezpiecznie będzie jeżeli do HTML przekazuje nazwę tabeli z MySQL, tak by za pomocą DOM, AJAX mógł sobie je pobrać.
np. mam kog w stylu:
Kod
<input type="text" name="article" index="15" tables="listArticles" cols="name" />

Gdzie tables to nazwa tabeli w BD. 
a cols = to nazwa kolumny

W ten sposób, po drugiej stronie JS mam krótki skrypt który to wszystko obsluguje, ale jakoś wydaje mi się, że nie jest to bezpieczna metoda. Bo ktoś w HTML'u może sobie odczytać parametr tables i cols i jak pokombinuje to może mi zaśmiecić BD. 

Dlatego moje pytanie do was, czy jest to bezpieczne? A jeżeli nie to jak ewentualnie przekazać dane z PHP do pliku JS (bez przeładowywania strony).


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
cojack
post 5.11.2009, 16:13:46
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Tzn jeżeli skrypt nie jest zabezpieczony przed atakami typu sql injection to jeszcze podajesz nazwy tabel, to tak jakbyś sobie w kostkę strzelił. Bo nikt nie musi wybierać z sql'a tabel tylko już od razu wie jak się one nazywają. Po prostu genialnie masz + 3 do szpanu.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
xajart
post 5.11.2009, 18:51:50
Post #3





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


No właśnie tak mi się coś wydawało, że jak tak to rozwiąże to nie będzie to bezpieczne. Tylko nie wiem jak innaczej przekazać stałą z nazwą tabeli z PHP do JS.
Oczywiście mogę to zrobić na zasadzie nadawania jakiegoś unikalnego klucza w includzie, na podstawie którego JS sobie go pobierze i przekaże do pliku wykonywalnego PHP, który zinterpretuje na jego podstawie do jakiej tabeli się on odwołuje. I wykreuje odpowiednie zapytanie do BD aktualizującej wpis. Ale to z kolei w mojej ocenie trochę mija się z celem, zwłaszcza kiedy w przyszłości rozbuduje się serwis o inne elementy (nowe tabele) to będzie trzeba ten skrypt odpowiednio wyedytować. 

Co do SQL Injection - to sądzę że raczej mam dobrze to zabezpieczone. A tak apropo zna ktoś jakieś fajne fuzzery do testowania aplikacji - najlepiej dobrze rozbudowane a zarazme nieskomplikowane w obsłudze?


Go to the top of the page
+Quote Post
ucho
post 6.11.2009, 10:14:55
Post #4





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


Jeśli używasz MySql 6 i ktoś znajdzie jakieś SqlInjection to i tak wyciągnie bez problemu nazwy wszystkich tabeli - podobnie w Postgresie można je pobrać z tabel systemowych (pg_*). A jeśli nie ma żadnej takiej luki to znajomość schematu bazy też nic nie pomoże.
Go to the top of the page
+Quote Post
xajart
post 22.11.2009, 00:24:52
Post #5





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Ściągnełem sobie jakiegoś fuzzera do sprawdzenia odporność na SQL Injecton oraz sam też kilka testów przeprowadziłem i nie ma szans na przebicie się. 

Więc moge śmiało stosowac rozwiązanie z przekazywaniem w formularzu nazwy tabeli. Ale wpadł mi inny pomysł do głowy, na zwiększenie bezpieczeństwa tego skryptu, a mianowicie robię coś takiego:
Kod
tables="<?php echo md5($nazwa_tabeli); ?>")



Następnie przez skrypt JS pobieram wartość tables i przekazuje do pliku php który odpowiada za zapisanie wartości w BD w odpowiedniej tabeli. 

Jest poddawana ona walidacji (czy zawiera znaki a-zA-z0-9). A następnie pobieram listę tabel z BD. I w ten sposób sprawdzam.

Kod
for ($n=0...)
if ($hash_table == md5($nazwa_tabeli_zBD[$n]))



PS. jeszcze myśle nad wprowadzeniem unikalności hashowania nazwy_tabeli, bo obecnie ona jest zawsze taka sama w zalenżności od nazwy i myśle by dodać do niej np wartość Tokena. Gdzie token - jest generowany unikalny i przypisany na czas zalogowania użytkownika do sesji. Wówczas będzie ten hash dosyć unikalny.
Kod
substr(md5($nazwa_tabeli.$_SESSION['token']), 0,8)



Wiem wiem, chyba przesadzam z tym bezpieczeństwem, ale to na wypadek gdyby zabezpieczenie przed SQL Injection kiedyś zawiodło, to lepiej mieć te nazwy tabel dość mocno zabezpieczone.

Ten post edytował xajart 22.11.2009, 00:26:16
Go to the top of the page
+Quote Post
rezik
post 22.11.2009, 01:49:15
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 2
Dołączył: 25.09.2009

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


haKsior:
Kod
... FROM information_schema.tables--


i już ma wszystkie nazwy tabel, generalnie filtruj tylko dane które mogłby naruszyć zapytanie SQL - hashowanie nazw tabel nie ma zbytnio większego sensu

Cytat
A tak apropo zna ktoś jakieś fajne fuzzery do testowania aplikacji


filtruj wszystkie dane przychodzące na każdym etapie i podatności na SQLI być nie powinno... nie ma raczej gotowych 'skanerów podatności'. Jakby były to by script kiddie połowę stron położyły ;P
Go to the top of the page
+Quote Post
ziqzaq
post 22.11.2009, 10:57:01
Post #7





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


~xajart
The Open Web Application Security Project (OWASP). Jest tam sporo informacji na temat bezpieczeństwa oraz narzędzi do testowania aplikacji internetowych. Wszystko to zebrane w jednym miejscu. IMO warto spędzić na niej trochę czasu.
Go to the top of the page
+Quote Post
xajart
post 22.11.2009, 14:25:07
Post #8





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Są fuzzery kiedyś szukałem pod tym katem i jest ich kilka różnych (tylko ciężko je znaleźć) - niektóre są proste w obsłudze a inne bardziej skomplikowane. Ostatnio używałem powerfuzzer.

ziqzaq dzięki za linka, przejże sobie to winksmiley.jpg

Ten post edytował xajart 22.11.2009, 15:48:40
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: 18.07.2025 - 02:41