Przekazanie informacji do kontrolera o treści stanu JavaScript

0

Posiadam w aplikacji webowej formularz rejestracji, który jest walidowany za pomocą JQuery. Oczywiście działa bezbłędnie. Jednak dla bezpieczeństwa zastosowałem drugą walidację w samej Java. Używam frameworka Spring.

Kontroler rejestracji wygląda tak

@PostMapping("/register")
    public ModelAndView register(@ModelAttribute("registerDTO") @Valid RegisterDTO registerDTO,
                                 BindingResult bindingResult,
                                 ModelMap modelMap) {
        if(bindingResult.hasErrors()) {
           // jakiś kod
         }
  // jakiś kod

Walidacja w Java jest zrobiona na wypadek, gdyby ktoś specjalnie wyłączył w przeglądarce obsługę JavaScript i próbował się zarejestrować. Jednak podczas gdy JavaScript jest włączony to ta walidacja w Java jest niepotrzebna, więc chciałbym ją w jakiś sposób zawarunkować. Mój pierwszy pomysł to było dopisanie takiego kodu

<noscript>
     <input type="hidden" name="isJavaScript" value="false" />
</noscript>

i w kontrolerze mogę wtedy odebrać ten parametrem requestem i sprawdzić czy wartość jest false czy nie. Jednak ten sposób nie ma większego sensu, ponieważ użytkownik może zbadać element strony i go podmienić, a wtedy do serwera zostanie wysłana wartość wpisana przez niego. Czy jest jakiś dobry sposób na przekazanie do kontrolera informacji na temat stanu JavaScript?

0

Zakładaj, że jeśli wartości w ogóle nie ma to znaczy, że JavaScript jest wyłączony.
Wartość dołączaj dynamicznie (z użyciem JS) przed wysłaniem formularza (wtedy gdy JavaScript jest włączony).

Nikt ci tego raczej nie ominie.

Ja bym w życiu nie robił walidacji po stronie klienta, chyba, że chodziłoby o jakieś pierdoły.

2

Walidacja po stronie klienta ? Co to znaczy ? Mam nadzieję że nie pracujesz w żadnym banku czy innym tego typu przedsiębiorswie :)

0
Fantazjatyk napisał(a):

Ja bym w życiu nie robił walidacji po stronie klienta, chyba, że chodziłoby o jakieś pierdoły.

Po co słać coś na serwer skoro można to już sprawdzić x razy szybciej po stronie klienta?

0
error91 napisał(a):
Fantazjatyk napisał(a):

Ja bym w życiu nie robił walidacji po stronie klienta, chyba, że chodziłoby o jakieś pierdoły.

Po co słać coś na serwer skoro można to już sprawdzić x razy szybciej po stronie klienta?

To takie proste! ;)

2

@Jonki1997 ale ty wiesz ze requesty da się słać nie tylko ręcznie z przeglądarki? :D Co więcej, jak ktoś robi jakiś pentesting to zwykle wali jakimś automatem requesty z róznymi dziwnymi inputami właśnie po to zeby sprawdzić czy walidacja nie jest gdzieś rypnięta. Client-side to możesz zrobić co najwyżej jakieś udogodnienie dla usera żeby wyświetlić mu błąd walidacji zanim wyśle formularz, ale nie możesz polegać na "bezpieczeństwie" takiej walidacji ani trochę.

1

@Shalom: a do tego JS można z łapy zmienić :D
@Fantazjatyk: taka walidacja nie jest głupia jeśli jest oczywiście też walidacja backendowa, np. walidacja długości username, albo przy rejestracji sprawdzanie czy username jest zajęty strzałem Ajaxowym

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