2011-08-25 35 views
5

Tôi đang cố gắng kiểm tra, nếu người dùng đã tạo mật khẩu có chứa các ký hiệu (bao gồm +, -, = dấu hiệu) số OR/AND. Tôi có thể làm như thế nào?Thực thi mật khẩu mạnh với PHP

function check_password($str) 
{ 

    if (!preg_match ("/[&@<>%\*\,\^!#$%().]/i", $str)) 

    { 
     $this->form_validation->set_message('check_password', 'Your password should contain a number,letter,and special characters"'); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 

} 

Cảm ơn.

+0

Bạn đã cung cấp câu trả lời cho câu hỏi của mình chưa? – Dani

+11

Cá nhân tôi, tôi * ghét trang web buộc tôi phải có một số ký tự đặc biệt lạ trong mật khẩu của mình. Bởi vì hiệu ứng duy nhất có trên tôi là tôi có xu hướng quên nó, và cần phải viết nó xuống, tạo ra một lỗ hổng bảo mật trong quá trình - một lỗ lớn hơn một tấn công từ điển sẽ bao giờ nếu bạn làm * một số * tỷ lệ giới hạn cố gắng đăng nhập. –

+0

Nếu tôi muốn sử dụng '_' thì sao? '' –

Trả lời

2

Bạn không phải liệt kê tất cả các ký tự đó. Bất cứ điều gì đó không phải là một số hoặc một chữ cái là một nhân vật đặc biệt (hoặc không gian):

(?:[^0-9A-z]|[0-9]) 
7

Đề nghị của tôi để kiểm tra sức mạnh mật khẩu là để phá vỡ từng yêu cầu bạn phải vào regexs riêng biệt, cụ thể:

$regexs = array(
       '/[0-9]+/', // Numbers 
       '/[a-z]+/', // Lower Case Letters 
       '/[A-Z]+/', // Upper Case Letters 
       '/[+-=]+/', // Your list of allowable symbols. 
    ); 

Khởi tạo bộ đếm với 0. Đối với mỗi regex, kiểm tra xem nó có khớp không. Nếu có, tăng bộ đếm bằng 1. Sau đó trả về true nếu bộ đếm lớn hơn 3 (hoặc 4 nếu bạn muốn chúng có một mật khẩu thực sự mạnh), ngược lại trả về false.

Tôi nghĩ rằng điều này sẽ có thể duy trì được nhiều hơn cho bạn trong thời gian dài nếu yêu cầu của bạn thay đổi.

0

Tôi khuyên bạn nên tìm theo một hướng khác. Nếu bạn đang áp đặt một hạn chế, chỉ cần yêu cầu nó được lâu hơn. Như đã được chỉ ra, việc sử dụng các biểu tượng sẽ rất có thể khiến người dùng quên mật khẩu và không bao giờ quay lại trang web của bạn. Để đăng bài bảo mật tối đa, truyện tranh sau trên trang đăng ký: http://xkcd.com/936/

Các vấn đề liên quan