4

ユーザー名とパスワードがデータベースに設定されているアカウントと一致するかどうかをチェックするログイン チェック スクリプトを作成しました。すべて正常に動作しますが、大文字と小文字は区別されません。このスクリプトで大文字/小文字もチェックするにはどうすればよいですか? 例: ユーザー名: Admin パスワード: My43sGG のアカウントがあります。ログイン フィールドに admin と my43sgg を入力しても機能します。

私のスクリプト:

<?php

// connect to the database
include("config.php");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM " .$members. " WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:index.php");
}
else {
?>
4

4 に答える 4

6

使用するBINARY

WHERE BINARY username = BINARY '$myusername' AND
      BINARY password = BINARY '$mypassword'

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-05-16T07:39:24.497 に答える
3

質問とは関係ありませんが、パスワードを共有シークレットとして AES 暗号化し、データベースで AES 暗号化文字列を検索した方がよいでしょう....それによって問題も解決されると思いますが、異なるケースで暗号化されている場合、それらは異なります

于 2013-05-16T07:44:26.600 に答える
0

このように検証するカスタム関数を書くことができます

function isPartUppercase($string) {
if(preg_match("/[A-Z]/", $string)===0) {
    return true;
}
return false;
}
于 2013-05-16T07:40:19.680 に答える