![]() |
![]() |
![]()
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). |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
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 |
|
|
![]()
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? |
|
|
![]()
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.
|
|
|
![]()
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 |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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 ![]() Ten post edytował xajart 22.11.2009, 15:48:40 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 02:41 |