защита

Started by барбос on 2013-11-02 07:57 — 4 replies, 1197 views

#1
Всем салют. Подскажите пожалуйста, как сделать чтобы регистрация проходила только в том случае, если, пароль будет начинаться с большой буквы, а остальные маленькие?
#2
php.su тебе в руки, а так задай условие и в условии пропиши проверку на первую букву или же делай ucfirst пусть само задается.
#3
барбос, ну вот так можно например, правда немного не по твоему запросу
//
// Check pass
//
function validate_pass($pass)
{
  global $lang;
 
  if(!preg_match("~(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{".PASS_MIN_LENGTH.",}~si", $pass))
  {
    return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  }
  $pass = trim($pass);
  $len = mb_strlen($pass);
  $chars='1234567890qwertyuiopasdfghjklzxcvbn mQWERTYUIOPASDFGHJKLZXCVBNM';
 
  if(($len < PASS_MIN_LENGTH) || ($len > PASS_MAX_LENGTH)) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  if(strpos($chars, $pass) !== false) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  if($len/2 == round($len/2)) {
      $p1 = mb_substr($pass ,0,$len/2);
      $p2 = mb_substr($pass,$len/2);
      $p22 = '';
      for($i = mb_strlen($p2)-1; $i>=0; $i--)
          $p22 .= $p2[$i];
      if($p1 == $p2 and mb_strpos($chars, $p1) and mb_strpos($chars, $p2)) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
      if($p1 == $p22 and mb_strpos($chars, $p1) and mb_strpos($chars, $p2)) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  }
  $chars = array();
  for($i=0; $i<$len; $i++)
  {
      if(isset($chars[$pass[$i]]))
          $chars[$pass[$i]]++;
      else
          $chars[$pass[$i]] = 1;
  }
  // Считаем процент уникальности символов
  $k = sizeof($chars) / $len * 100;
  if($k < PASS_PERCENT_UNIQ) return array('error' => true, 'error_msg' => $lang['PASS_INVALID']);
  return array('error' => false, 'error_msg' => '');
}

define('PASS_MAX_LENGTH',  32);
define('PASS_MIN_LENGTH',  6);
define('PASS_PERCENT_UNIQ',  46);

строка должна содержать не менее 6 букв, цифр, подчеркиваний и тире.
Строка должна содержать хотя бы одну заглавную букву, строчную и цифру.

Пароли которые функция считает плохими:
1. Длинна < 6 символов
2. Последовательность символов как на клавиатуре (123456, qwerty)
3. Повторные комбинации последовательности символов (werwer, 12341234)
4. "Отражённые" последовательности символов (123321, qweewq)
5. Процент уникальности символов меньше 46 (wwwfff, 000000)
#4
Wertos, А куда что пихать?
#5
барбос, если честно мне лень писать, потому что некогда ((