Blokada wybranych znaków w formularzach - PHP


(czytacz) #1

Mam pewien problem

Chcę w formularzach uniemożliwić wprowadzanie 4 znaków:

' " < >

Oczywiście w temacie bezpieczeństwa. Zamiana znaków na encje mnie nie urządza, urywanie ich i wprowadzanie reszty do bazy również. Chcę aby w przypadku wystąpienia takiego znaku wyświetlił mi się komunikat, że użyto niedozwolonych znaków. Czy jest na to jakaś inna metoda niż "ręczne" wklepanie procedury typu:

  • wybierz string

  • szukaj znaków

  • zwróć błąd?

JS odpada, chcę zabezpieczyć serwis od strony serwera. Klient może sobie wyłączyć obsługę JS i całe zabezpieczenie bierze w łeb.


(Copycona) #2

strpos()

http://www.php.net/manual/pl/function.strpos.php

https://ideone.com/nEUCd

<?php= 'dafadfafsaf';$tekst2 = 'dsfafasf';

(czytacz) #3

Dzięki, pokombinuję z tym :slight_smile:


(djgrzenio) #4

A nie lepiej by było po stronie js/jquery to zrobi. Od razu była by możliwość zablokowania w czasie rzeczywistym wybranych znaków.


(Drobok) #5

JQuery to tylko dodatek, ktoś se wyłączy js'a i posypie mu stronę :slight_smile:


(djgrzenio) #6

Oczywiście masz racje. Jednak jeżeli już ktoś tak kombinuje to i więcej wykombinuje, a po co z takimi walczyć. Większość stron ma teraz js, ja chociażby dodaje seletivzera czy html5shiv wiec zablokowanie js od razu cala stronę może posypać. Wydaje mi się ze blokada w js będzie lepsza dla większości użytkowników no i od razu masz mnie requestow do serwera nie potrzebnych.


(Drobok) #7

Co do request'ów masz rację, jednak miej na uwadze, że sprawdzenie tego po stronie serwera jest bezpieczniejsze, więc najlepiej stosować oba :slight_smile:


(djgrzenio) #8

Masz racje. Ja osobiści akurat nie musiałem po stronie serwera tego stosować, gdyż ostatni projekt jaki robiłem to był kalkulator (aktów notarialnych i wykończenia mieszkania) dla dewelopera wiec zależało mi tylko na zablokowaniu wszystkiego poza cyferkami


(czytacz) #9

Wg mnie JS powinien być tylko dodatkiem ułatwiającym życie. Jeżeli user może łatwo wyłączyć zabezpieczenia (albo może mieć je wyłączone nieświadomie) to nie jest to takie zabezpieczenie jest niewiele warte. Dlatego preferuję jednak sprawdzanie po stronie serwera.

Wymodziłem sobie taką funkcję, która w zupełności mi wystarcza i mogę sobie ją użyć wielokrotnie bez powtarzania kodu:

<?phpfunction FieldTestChar() {$check_args = TRUE;$tab = func_get_args();$tab as $value) {$check_args = !preg_match('#[\'"]#', $value);

(Copycona) #10

faq.php?mode=bbcode

W tym przypadku akurat jest temat o php, ale jako, że nie ma odpowiednika dla innych języków, to też się dla nich ten tryb nada :wink: