Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Blokada pewnych znaków w haśle
Asig
post 18.10.2014, 14:33:16
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.10.2013

Ostrzeżenie: (0%)
-----


Witam!

Mam problem z zablokowaniem niedozwolonych znaków w haśle.
Chcę aby użytkownik ustawiał bezpieczne hasło, tzn. z małych liter, dużych liter, cyfr, znaków specjalnych.
I żeby zablokować niedozwolone znaki, typu polskie znaki, ( ) ' " - itd.

Pierwszą połowę bez problemu zrobiłem, lecz z drugą połową (blokada niedozwolonych znaków) nie mogę sobie poradzić, ponieważ nie wiem jakie dokładnie znaki muszę blokować (przecież jest ich setki w różnych językach) i nie wiem za bardzo jak to napisać.

Skrypt wygląda tak:
  1. <?php
  2. $password = "sa%sds3";
  3.  
  4. if(preg_match('/[a-z]/', $password) AND preg_match('/[A-Z]/', $password) AND preg_match('/[0-9]/', $password) AND preg_match('/[\!\@\#\$\%\^\&\*]/', $password)) {
  5. echo'Twoje hasło zawiera małe litery, duże litery, cyfry i znaki specjalne.';
  6. } else {
  7. echo'Błąd!';
  8. }
  9. ?>


Proszę o pomoc.
Pozdrawiam!
Go to the top of the page
+Quote Post
Pyton_000
post 18.10.2014, 14:43:24
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


usuń preg_replace wszystkie znaki na które pozwalasz i porównaj dł. jeżeli > 0 to błąd

Ten post edytował Pyton_000 18.10.2014, 14:45:34
Go to the top of the page
+Quote Post
Asig
post 18.10.2014, 14:50:36
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.10.2013

Ostrzeżenie: (0%)
-----


Przepraszam, ale nie rozumiem.
Przeczytałem twój post 20x i nie rozumiem o co chodzi...
Go to the top of the page
+Quote Post
viking
post 18.10.2014, 15:06:11
Post #4





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Tłumaczenie : masz sprawdzić czy ciąg zawiera jakieś znaki na które nie pozwalasz.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 18.10.2014, 15:13:28
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@up nie, bo tych znaków jest więcej niż dozwolonych smile.gif

Masz zrobić odwrotnie np:
  1. preg_replace('[a-zA-Z0-9]','',$haslo);

Jeżeli po wykonaniu tego strlen > 0 to znaczy że masz niedozwolone znaki (poza literami i cyframi). Dodaj do tego znaki na które zezwalasz i tyle.
Go to the top of the page
+Quote Post
viking
post 18.10.2014, 15:16:04
Post #6





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Właśnie to napisałem smile.gif Ciąg, czyli ten po przepuszczeniu przez preg_replace. Mam temperaturę, chyba niejasno piszę.
Inna sprawa że to nie ma sensu. Ciąg od użytkownika wrzuć do http://pl1.php.net/manual/en/function.password-hash.php i sprawdzaj cały zamiast wymuszać konkretne znaki.

Ten post edytował viking 18.10.2014, 15:20:08


--------------------
Go to the top of the page
+Quote Post
Asig
post 18.10.2014, 15:25:02
Post #7





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.10.2013

Ostrzeżenie: (0%)
-----


No nie chce mi to coś działać :/
  1. $password = "sasds3";
  2. if(strlen(preg_replace('[a-zA-Z0-9]', '', $password)) > 0) {
  3. echo'1';
  4. } else {
  5. echo'2';
  6. }

Zawsze jest odpowiedź 1 czy dodam jakieś znaki specjalne czy nie.
Go to the top of the page
+Quote Post
viking
post 18.10.2014, 15:58:33
Post #8





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


  1. $password = "sasds3-";
  2. var_dump(preg_replace('/[a-zA-Z0-9]/', '', $password));


--------------------
Go to the top of the page
+Quote Post
by_ikar
post 18.10.2014, 16:54:31
Post #9





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Są odpowiednie "klasy" znaków, jak przykładowo \W które oznacza przeciwieństwo \w. Można te wszystkie warunki zapisać w jednym wyrażeniu, w sumie dość nawet prostym. Pomysł z preg_replace uważam za totalnie chybiony.. Tak samo jak pomysł z kilkoma warunkami/wyrażeniami.. Moja propozycja: http://www.regexr.com/39oo3 w ostatnim "warunku" wstawiasz albo znaki które chcesz żeby były, albo znaki które chcesz zablokować.
Go to the top of the page
+Quote Post
Pyton_000
post 18.10.2014, 17:15:27
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


ikar twoje rozwiązanie przepuści np. coś takiego: 1312daf34YB9yb8=--":'*&%
Go to the top of the page
+Quote Post
pitu
post 18.10.2014, 17:20:40
Post #11





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

Ostrzeżenie: (0%)
-----


Offtop:
Dlaczego chcesz zabronić znaków specjalnych w haśle?

Ten post edytował pitu 18.10.2014, 17:20:58


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post
Kloc
post 18.10.2014, 17:57:16
Post #12





Grupa: Zarejestrowani
Postów: 115
Pomógł: 8
Dołączył: 8.06.2014

Ostrzeżenie: (0%)
-----


  1. $password = "sasds3Ab" ;
  2. if (preg_match ('#^[a-
  3. zA-Z0-9]+$#' , $password )) {
  4. echo'ok' ;
  5. } else {
  6. echo'no' ;
  7. }




--------------------
Kloc = Kolor
Obama !== Murzyn
Obama === Kloc


Jak Ci pomogłem to daj Pomógł, tu nie chodzi o te Pomógł, bo to do niczego nie potrzebne, ale daj! :D
Go to the top of the page
+Quote Post
Asig
post 18.10.2014, 18:05:59
Post #13





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.10.2013

Ostrzeżenie: (0%)
-----


Cytat(pitu @ 18.10.2014, 18:20:40 ) *
Offtop:
Dlaczego chcesz zabronić znaków specjalnych w haśle?


Sam nie wiem...
Chcę aby dozwolone były znaki takie jak w większych serwisach typu gogle, Microsoft.
Tam przy rejestracji jak wpisze się niewłaściwy znak (np. ą, ż) wyskakuje:
Kod
Hasło może zawierać następujące znaki: a-z, A-Z, 0-9 oraz typowe znaki interpunkcyjne.


Ten sposób (viking) działa ok:
  1. $password = "sasds3-#@@!#$%&(){}*+,-./:;<>=?[]^_|~$@$%&^%%^";
  2.  
  3. if(!strlen(preg_replace('/[a-zA-Z0-9-_\@\!\#\$\%\&\(\)\{\}\*\+\,\-\.\/\:\;\<\>\=\?\[\]\^\_\|\~]/', '', $password)) > 0) {
  4. echo'ok';
  5. } else {
  6. echo'blad';
  7. }


Jest wszystko cacy.

Dziękuję wszystkim za pomoc smile.gif

Ten post edytował Asig 18.10.2014, 18:19:12
Go to the top of the page
+Quote Post
by_ikar
post 18.10.2014, 19:07:23
Post #14





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 18.10.2014, 18:15:27 ) *
ikar twoje rozwiązanie przepuści np. coś takiego: 1312daf34YB9yb8=--":'*&%

No shit sherlock:

Cytat
w ostatnim "warunku" wstawiasz albo znaki które chcesz żeby były, albo znaki które chcesz zablokować.


To był tylko przykład, a nie gotowiec. Negowałem tylko te znaki które opisał w pierwszym poście + dołączyłem "instrukcje" gdzie dodać te które chce aby występowały, albo te których nie chcę..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 01:38