walidacja pola tekstowego, a nowa linia (klawisz Enter)

0

Mam element typu textarea, którego treść waliduje JS (wyrażenie regularne). Po prostu dopuszczam określone cyfry, litery i znaki. Niby ok, ale jak ktoś naciśnie enter to właśnie o ten znak nowej linii JS się rzuca. Jak to obejść?

2

Wstaw tego regexa, żeby można przetestować jak ten "JS się rzuca".

https://stackoverflow.com/a/1981692

Ogólnie jeśli potrzebujesz wykryć jedynie sam enter, bez innych białych znaków (spacji, tabulatorów itd) to możesz spróbować

const text = `Lorem ipsum dolor sit amet consectetur adipisicing elit. 
Praesentium quos debitis expedita excepturi culpa officiis,
illum vel maxime tempora maiores tenetur aliquam cupiditate,
qui nemo nostrum recusandae voluptates, at quas. Et error ea molestias,
sapiente nesciunt deleniti libero iusto consequatur!`;
console.log(/[\r\n]/.test(text)); // true

const text2 = 'Lorem ipsum';
console.log(/[\r\n]/.test(text2)); // false
1
kosmonauta80 napisał(a):

Mam element typu textarea, którego treść waliduje JS (wyrażenie regularne). Po prostu dopuszczam określone cyfry, litery i znaki. Niby ok, ale jak ktoś naciśnie enter to właśnie o ten znak nowej linii JS się rzuca. Jak to obejść?

Jak używasz textarea, to zgadzasz się na testy wieloliniowe czyli w konsekwencji Entery.
A jak się nie zgadzasz, to chyba się używa intput type text ???

tertium non datur

0

To ma być pole "uwagi do zamówienia", więc textarea pasuje. Czyli walidację trzeba będzie robić po stronie backendu (PHP).

Bo jak inaczej zabezpieczyć się przed "złośliwym użytkownikiem", który w takie pole wpisze jakiś skrypt?

1

Jak chcesz sie zabezpieczyć przez złośliwym inputem to walidację i tak po stronie backendu musisz mieć.
Walidację po stronie frontu atakujący może obejść więc traktuj ją tak jakby nie istniała. (Ale to nie znaczy żeby walidacji na froncie nie robić ;-) )

0
kosmonauta80 napisał(a):

Bo jak inaczej zabezpieczyć się przed "złośliwym użytkownikiem", który w takie pole wpisze jakiś skrypt?

Jeśli chodzi o walidację tego po stronie klienta to przede wszystkim nie używaj właściwości innerHTML (https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML) do wstawiania treści pobranych od użytkownika na stronę, bo przy nieprawidłowym użyciu bardzo łatwo w taki sposób o XSS (https://sekurak.pl/czym-jest-xss/)

https://codepen.io/cferdinandi/pen/xawBoB

Dużo bezpieczniejsze jest tutaj textContent (https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent), ponieważ próbuje wstawić przekazaną zawartość jako zwykły tekst i zazwyczaj nie pozwala na wstawienie kodu HTML

const xss = `<img src=x onerror="alert('XSS Attack')">`;
document.body.textContent = xss;
0

A nie prościej zrobić tak, by za pomocą

regexObj.test(str) 

sprawdzić, czy pole tekstowe zawiera określone znaki potencjalnie niebezpieczne?
Pytanie tylko jakie znaki można uznać za niebezpieczne. Przecinek i kropka powinna być ok.

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