質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

337閲覧

ログインとパスワードのシステムサンプル

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/31 09:37

https://www.websec-room.com/2015/03/15/2153
こちらのサイトを参考に、手打ちでコピーして、自分で調整できるところは調整して
ポートフォリオに利用させてもらおうと考えています。

<?php define("DNS","mysql://user01:pass@localhost/Test?charset=utf8"); define("SERVER","192.168.11.11"); define("SENDER_EMAIL","root@localhost"); define("STRETCH_COUNT" , 1000); /* CSRFトークン作成 */ function get_csrf_token(){ $TOKEN_LENGTH = 16; $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH); return bin2hex($bytes); } /* パスワードのソルト+ストレッチング */ function stretchedPassword($salt,$password){ $hash_pass=""; for($i = 0; $i<STRETCH_COUNT; $i++){ $hash_pass = hash("sha256",($hash_pass . $salt . $password)); } return $hash_pass; } /* ソルト作成 */ function get_salt(){ $TOKEN_LENGTH = 4;//4*2=8byte $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH); return bin2hex($bytes); } /* URLの一時パスワード作成 */ function get_url_password(){ $TOKEN_LENGTH = 16;//16*2=32byte $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH); return hash("sha256",$bytes); }

defineで定義する定数の2つ目をつける意味がいまいちわからないので教えていただきたいです。
(後のソースコード読めばある程度わかるようだったら申し訳ないです)
パスワードのソルト+ストレッチング以下の項は、
「体系的に学ぶ安全なwebアプリケーションの作り方」を買ってあるので、
そちらを読んで理解しようと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

意味がわからない以前に、掲載ソースだけ見ても使用している箇所がないので、意味がないと言えます。

参照しているところの作者さんが習慣的に書いているのか、
別の箇所で参照している可能性も考えられます。
(例えばパスワードリセットメール送信するケースなど。)

defineって意味わかりますか?
第1引数の識別子が出現したら第2引数で示された文字列に置き換えることなのです。
PHP: 定数 - Manual
(対外的に見える、見せる)サーバーのIPアドレスをソースコード内に何箇所も直接「192.168.11.11」と書いてしまわず、SERVERと置き換えることで、
一箇所だけ書き換えれば済むようになっています。

なので、ソースコード全体で「192.168.11.11」はdefine箇所以外では出てこなくて「SERVER」ならいくつも出現します。
$url = "https://" . SERVER . "/register_confirm.php?" . $url_pass;
$url = "https://" . '192.168.11.11' . "/register_confirm.php?" . $url_pass;の意味になり、
$url = "https://192.168.11.11/register_confirm.php?" . $url_pass;の意味になります。

つまり、自分のケースに置き換えるなら、
ローカルのテスト環境であれば「127.0.0.1」や「localhost」にすることで、
あるいはレンタルサーバーならレンタルサーバーのホスト名やIPアドレスにすることで動作します。

ソースコード中で1箇所しか使わないものもこうしてdefineする理由についてですが、
テキスト検索などで修正箇所を逐一検索して置き換えるやり方をしてしまうと、
うっかり直さなくて良いところまで直してしまったり、
あるいはA→Bに変更したあとにB→Cに変更するときにBへの変更漏れがあったりすると
以後ずっと修正漏れを生む原因になったりします。

約束事として、動作する環境依存の定義を一箇所に集めて、
そこだけ書き換えれば他の環境でも動作できるようにすると、
修正漏れを防げます。

投稿2017/07/31 09:50

編集2017/08/01 00:32
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/31 10:05

確かにこのソースだけでは使っている箇所はないですね。 先に提示してあるurlの記事で、DNSでページ検索をかけたところ、 データベース接続に使われていました。では、その後の mysql://user01:pass@localhost/Test?は?と思って検索したところ 定数定義のところ以外では出ませんでした。 この場合、DNSとそれ以後一緒に定義した定数は一緒に読み込まれて データベースとのやりとりに使われているという解釈でいいのでしょうか…
退会済みユーザー

退会済みユーザー

2017/08/01 00:29 編集

defineに関する説明を補足しました。
退会済みユーザー

退会済みユーザー

2017/08/01 12:18

丁寧にありがとうございます! 引数、識別子の事しっかり調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問