認証スクリプトの作成例


スクリプトの認証



導入


私はPHPCSに訓練短い時間では、私は、認証スクリプトの助けのための要求の多くを見ました。私たちは、最小限のセキュリティと認証スクリプトを作成する方法を初心者に捧げ、この小さなチュートリアルにしています。

序文


あなたのデータ伝送方法により、フォームを知っていると仮定されます。

より多くの可視性のために、GETメソッドを使用します。

我々は、パスワードの暗号化をオフと再設定用のメールを動作します。

目標は、それが唯一のユーザーアカウントにアクセスするための試行回数を制限する、シンプルな認証メカニズムを理解することです。

テーブルの作成


チュートリアルの目的のために我々は6つのフィールドを持つテーブルを作成します。

NOTは「table_utilisateurを(存在する場合はCREATE TABLE

「Id'int(3)NOT NULL AUTO_INCREMENT、

「User'varchar(20)は、NOT NULL latin1_general_ciを照合、

「Pass'varchar(40)は、NOT NULL latin1_general_ciを照合、

'Nbr_connect' TINYINT(1)NOT NULL DEFAULT '0'、

「Dates'datetime NOT NULL、

PRIMARY KEY(ID)、

UNIQUE KEY 'ユーザ'( 'ユーザ'));

config.phpを


私達は私達のデータベースに接続するために必要な情報が含まれる、config.phpファイルを作成します。

<?PHP$ DB_serveur = ''; //サーバ名$ DB_utilisateur = ''; //データベースユーザの名前$ DB_motdepasse = '';データベースにアクセスするためのパスワード//$ DB_base = ''; //データベース名$接続=にmysql_connect($ DB_serveur、$ DB_utilisateur、$ DB_motdepasse)//これは、サーバーに接続しますまたは( '行の' .__ LINE__ mysql_error()を。)死にます。mysql_select_db($ DB_base、$接続が)//これは、データベースに接続しますまたは( '行の' .__ LINE__ mysql_error()を。)死にます。?>

index.phpを


このファイルには、私たちは私たちのユーザーアカウントにアクセスできるようになりますフォームが含まれます。

ログイン: パスワード:

connect.php


これは、私たちはユーザーのアカウントかどうかに接続するためのログイン名とパスワードを解析することができますファイルです。
  • 私たちは、ページへのアクセスの条件を作成します。


<?PHP)(!ISSET($ _ GET [ 'ログイン']の場合 && !ISSET($ _ GET [ 'パスワード'])){ヘッダ( '場所:index.phpを');終了します。}他{}?>

変数のログイン」と「パスワード」が定義されていない場合は、この状態では、我々は、ログインフォームにユーザーをリダイレクトします。成功した場合、我々はスクリプトを継続することができるようになります。


変数のログイン」と「パスワード」はそれほど存在し、我々が扱うだろうと想定されます

<?PHP)(!ISSET($ _ GET [ 'ログイン']の場合 && !ISSET($ _ GET [ 'パスワード'])){ヘッダ( '場所:index.phpを');}他{//私たちは、変数を確認します'!+ $ / / ^ [:alnum] []'、$ _ GET [ 'ログイン'])金(するpreg_match(もし!するpreg_match( '/ ^ [[:alnum:]]を+ $ /'、$ _ GET [ 'パスワード'])){エコー「あなたが唯一の文字や数字を入力する必要があります
「;「再試行」エコー;出口();}他{( 'config.phpの')が必要です。 //これは、ファイルを主張しています$ログイン= $ _ GET [ 'ログイン'];$パスワード= $ _ GET [ 'パスワード'];}}?>

ここでPCRE関数で:するpreg_match()、ログイン名とパスワードとして渡された文字は文字および/または数字であるかどうかがチェックされます。 (この操作は非常に便利ではありません)

英数字以外の文字はエラーメッセージを発見し、再試行するようユーザーに促している場合。そうならば、それは「あなたは、変数を作成し、当社の「config.phpの」ファイルやスクリプトで、より使いやすさを含んでいます ログイン$ 「そして」 $パスワード 」。

時間私たちのconnect.phpファイルをしようとの、新しい定数を追加するには、config.phpファイルに行ってみましょう: _MAX_TENTATIVE これまで我々は、例えば値「3」を割り当てます。

( '_ MAX_TENTATIVE'、3)を定義します。

この定数は、ユーザーアカウントのログイン試行の回数を制限します。

今すぐ戻って私たちのconnect.phpへの1-:

2の試みを一致しない場合は、私たちが登録されます。

クォータに達した場合にアクセスしようとする試みが防止され、純粋に翌日までアカウント:

<?PHPもし(はmysql_num_rows($ requete_2)== 0){//私たちは結果を取得します$結果=は、mysql_fetch_array($ requete_1、MYSQL_ASSOC)。//私たちは、最後の接続の日時を回復します$ Lastconnection = [( ''、$結果を爆発"日付"]);$ Lastjour =( ' - ' $ lastconnection [0])爆発。//私たちは、試行回数を回復して割り当てます$ Nbr_essai = $結果["nbr_connect"];($ lastjour [2] ==日(IF"D") && _MAX_TENTATIVE == $のnbr_essai){あなたは明日しようとするクォータの試みに達している」エコー!
「;出口();}他{$ Nbr_essai ++;$更新= "UPDATEのSET table_utilisateur nbr_connect = '"。$ Nbr_essai。"「日付= NOW()WHERE ID = '"。$結果["ID"]。""";するmysql_query($更新)またはダイ(mysql_error());パスワードおよび/またはログインが間違っている」エコー
「;「再試行」エコー;出口();}}?>

青線記録接続試行。

両者が一致した場合、それは試行回数をリセットし、最後の接続の日時に更新されます。
<?PHP他{$ Nbr_essai ++;$更新= "UPDATEのSET table_utilisateur nbr_connect = '"。$ Nbr_essai。"「日付= NOW()WHERE ID = '"。$結果["ID"]。""";するmysql_query($更新)またはダイ(mysql_error());パスワードおよび/またはログインが間違っている」エコー
「;「再試行」エコー;出口();}?>

そして、それは、例えばメンバーフォルダにリダイレクトします。

1 - 私たちの完全なファイル「connect.phpは、」私たちを与えます:

<?PHP)(!ISSET($ _ GET [ 'ログイン']の場合 && !ISSET($ _ GET [ 'パスワード'])){ヘッダ( '場所:index.phpを');}他{//私たちは、変数を確認します'!+ $ / / ^ [:alnum] []'、$ _ GET [ 'ログイン'])金(するpreg_match(もし!するpreg_match( '/ ^ [[:alnum:]]を+ $ /'、$ _ GET [ 'パスワード'])){エコー「あなたが唯一の文字や数字を入力する必要があります
「;「再試行」エコー;出口();}他{( 'config.phpの')が必要です。 //これは、ファイルを主張しています$ログイン= $ _ GET [ 'ログイン'];$パスワード= $ _ GET [ 'パスワード'];$のSql = "ユーザー= 'table_utilisateur SELECT * FROM".mysql_escape_string($ログイン)。""";//ログインがあるかどうかをチェック$ Requete_1 =するmysql_query($ sqlを)またはダイ(mysql_error());もし(はmysql_num_rows($ requete_1)== 0){「このログインが存在しないエコー!
「;「再試行」エコー;出口();}他{ログインとパスワードは、ユーザアカウントと一致した場合//チェック$ Requete_2 =するmysql_query($ sqlを。" AND '=合格".mysql_escape_string($パスワード)。""")またはダイ(mysql_error())。もし(はmysql_num_rows($ requete_2)== 0){//私たちは結果を取得します$結果=は、mysql_fetch_array($ requete_1、MYSQL_ASSOC)。//私たちは、最後の接続の日時を回復します$ Lastconnection = [( ''、$結果を爆発"日付"]);$ Lastjour =( ' - ' $ lastconnection [0])爆発。//私たちは、試行回数を回復して割り当てます$ Nbr_essai = $結果["nbr_connect"];($ lastjour [2] ==日(IF"D") && $ MAX_essai == $ nbr_essai){あなたは明日しようとするクォータの試みに達している」エコー!
「;出口();}他{$ Nbr_essai ++;$更新= "UPDATEのSET table_utilisateur nbr_connect = '"。$ Nbr_essai。"「日付= NOW()WHERE ID = '"。$結果["ID"]。""";するmysql_query($更新)またはダイ(mysql_error());パスワードおよび/またはログインが間違っている」エコー
「;「再試行」エコー;出口();}}他{//私たちは結果を取得します$結果=は、mysql_fetch_array($ requete_2、MYSQL_ASSOC)。$ Nbr_essai = 0;$更新= "UPDATEのSET table_utilisateur nbr_connect = '"。$ Nbr_essai。"「日付= NOW()WHERE ID = '"。$結果["ID"]。""";するmysql_query($更新)またはダイ(mysql_error());//これは、メンバーエリアにリダイレクトヘッダ( '位置:メンバー/ index.phpを')。}}}}?>

結論


少しロジックとシンプルな基本的な機能を実行して、認証スクリプトを実行することが容易です。

UPDATE


チュートリアルでは、基本的な機能で教訓的な方法を実現したが、個人的に私はこのセクシーな^^を見つけることができません。だから私は「クリーンなコードを提供し、より最適化されました。

「config.phpの」ファイルと私たちは「connect.phpを編集しますので、ファイル。
新しいファイルには、「fonctions.phpに作成されます。

ファイル config.phpを
$ DB_serveur = ''; //サーバ名$ DB_utilisateur = ''; //データベースユーザの名前$ DB_motdepasse = '';データベースにアクセスするためのパスワード//$ DB_base = ''; //データベース名( '_ MAX_TENTATIVE'、3)を定義します。

ファイル fonctions.php認証スクリプトの作成例

ファイル connect.php認証スクリプトの作成例
認証スクリプトの作成例この記事(PDF)をダウンロード phpAnonyme投稿者。 」と題されたこの文書 から」認証スクリプトの作成例コード・ソース (Codes-sources.commentcamarche.net)クリエイティブ・コモンズのライセンスの下で利用できるようになります。あなたはライセンスの定める条件の下で、このページのコピーを変更、コピーすることができ、このノートとして明確に表示されます。この記事をダウンロードする(PDF