Po co robić input sanitization?

Odpowiedz Nowy wątek
2019-06-11 21:01
1

Od zawsze chyba wszystkie tutoriale, książki, kursy itd. o tym trąbiły, a właściwie po co robić sanityzować dane z wejścia?

Doszedłem do wniosku, że niewiele to daje i chciałbym się skonsultować :D

edytowany 4x, ostatnio: WeiXiao, 2019-06-11 21:46

Pozostało 580 znaków

2019-06-11 21:20
1

Trochę Rozwiń myśl, kiedy, w jakiej sytuacji, jakiś przykład, bo tak to szklana kula:)


Pozostało 580 znaków

2019-06-11 21:21
0

@lion137:

W kontekście aplikacje webowych, formularzy, POSTów, itd.

Baz danych, jsonów, widoków htmlowych (server side rendered)

edytowany 3x, ostatnio: WeiXiao, 2019-06-11 21:22

Pozostało 580 znaków

2019-06-11 21:22
1

To, chociażby, ze względów bezpieczeństwa.


edytowany 1x, ostatnio: lion137, 2019-06-11 21:23

Pozostało 580 znaków

2019-06-11 21:23
0

No ale jakiego?

ESKUEL INDŻEKSZYN - au7h 2019-06-25 00:16
@au7h: byś tylko zerknął niżej - WeiXiao 2019-06-25 00:17
nie chce mi się, bo ja już śpię ;p - au7h 2019-06-25 00:17

Pozostało 580 znaków

2019-06-11 21:27
6

Exploits of a Mom


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
A poza tym uważam, że Unia Europejska powinna być zniszczona:) - lion137 2019-06-11 21:29

Pozostało 580 znaków

2019-06-11 21:28
0

@Wibowit:

W tych czasach chyba każde współczesne środowisko oferuje parametryzowanie zapytań oraz jeszcze pewnie więcej trików typu analiza AST zapytania, więc jak Ty chcesz ten sql injection robić?

edytowany 5x, ostatnio: WeiXiao, 2019-06-11 21:30
No i co z tego, skoro spora cześć programistów nie jest tego świadoma i nie ma pojęcia o Sql Injection. - MarekR22 2019-06-13 11:14

Pozostało 580 znaków

2019-06-11 21:41
0

Java ma PreparedStatement dostępne chyba od wersji 1.1 Javy wydanej w roku 1997, ale myślę, że do tej pory wiele SQLi jest klejonych ręcznie. Dzieje się tak np w spadkowej części systemu nad którym pracuję w firmie :]


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2019-06-11 21:43
0

@Wibowit:

Jeżeli chodzi o stare systemy to zgadzam się, że jest to konieczne, ale chodzi mi o współczesne, dojrzałe środowiska.

edytowany 1x, ostatnio: WeiXiao, 2019-06-11 21:43
Gratuluję, striggerowałeś mnie. - Satanistyczny Awatar 2019-06-25 00:10

Pozostało 580 znaków

2019-06-11 21:59
0

Myślę, że takie klejone SQLe będą się pojawiać i w nowych systemach, bo jeśli automatycznie wygenerowane zapytania są zbyt wolne, a ręcznie klejone są rozbite na wiele metod generujących poszczególne elementy zapytania to komuś może się nie chcieć pakować w PreparedStatement. Np:

val part1 = "column1 = $arg1"
val part2 = "column2 = $arg2"
// partów jest 10
val query =
  if (abc == xyz) {
    "select a from b where $part1 and $part3 and $part5"
  } else if (qwe == rty) {
    "select a from b where $part3 and $part8"
  } else {
    "select a from b where $part4 and $part9 union select c from d where $part1 and $part9"
  }

Zamiana tego na PreparedStatement jest możliwa, ale czy ktoś ją zrobi?

Oprócz SQL injection mamy np:

  • cross site scripting
  • lewe tokeny uwierzytelniające (np JWT ma tryb bez podpisu i bez szyfrowania - trzeba to jawnie odrzucać)
  • ścieżki do plików - ktoś może np zażądać pliku http://server.abc/assets/../../../../..//etc/passwd, a my mapujemy sobie własnym mapperem /assets/<path> na np /home/user/app/static/<path> i już nieszczęście gotowe
  • denial of service - dla przykładu możesz udostępnić język zapytań (taki jak tu na forum na przykład do wyszukiwania postów), a ktoś zrobi zapytanie na 5 megabajtów i zajedzie ci bazkę

Poza tym wczesne sprawdzenie poprawności danych pozwala w ogólności uniknąć niepotrzebnego mielenia danych. Jeśli od razu widać, że dane są złe to pchanie ich po całym systemie narobi niepotrzebnego ruchu, exceptionów, itd

Wszystko w ramach potrzeb oczywiście. Jeśli masz super hiper framework który robi wszystko za ciebie to oczywiście nie musisz nic robić.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2019-06-11 22:02

Pozostało 580 znaków

2019-06-11 22:05
0

@Wibowit:

cross site scripting

Brak sanityzacji nie implikuje braku escapowania na wyjściu

lewe tokeny uwierzytelniające (np JWT ma tryb bez podpisu i bez szyfrowania - trzeba to jawnie odrzucać)

nie wiem

ścieżki do plików - ktoś może np zażądać pliku http://server.abc/assets/../../../../..//etc/passwd, a my mapujemy sobie własnym mapperem /assets/<path> na np /home/user/app/static/<path> i już nieszczęście gotowe

no faktycznie, jeżeli ktoś takie coś robi, to jest możliwy wektor ataku, no ale kto w taki sposób to realizuje xD

denial of service - dla przykładu możesz udostępnić język zapytań (taki jak tu na forum na przykład do wyszukiwania postów), a ktoś zrobi zapytanie na 5 megabajtów i zajedzie ci bazkę

ale input sanitization to nie to samo co input validation i w sumie to też dotyczy tego przykładu z plikami.

Walidacja mogłaby polegać na sprawdzeniu czy path składa się tylko z literek i cyfr np. obrazek123 albo id pliku 5223abcd

edytowany 1x, ostatnio: WeiXiao, 2019-06-11 22:05
Ależ możesz też używać > do cytatów. :) - Silv 2019-06-11 23:15

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot