パーミッションの設定について
- PHPとMySQLの勉強をはじめました。パーミッションについて教えてください。
- PHPでMySQLに接続する際、サーバ名、ユーザ名、パスワード、データベース名を別のPHPファイルに書き込んでいます。これらのファイルのパーミッションはどのように設定すればよいでしょうか?
- セキュリティのために、データを格納しているディレクトリと情報を書き込んでいるファイルのパーミッションを適切に設定する必要があります。具体的には、どのようなパーミッションが適切でしょうか?
- ベストアンサー
パーミッションの設定
最近 PHP と MySQL の勉強をはじめました。 パーミッションについて教えてください。 サーバをレンタルしてPHP で MySQL に接続してデータを読み込んでいます。MySQL に接続する際の サーバ名,ユーザ名,パスワード,データベース名 は info.php という別のPHPファイルに書き込み、それを require_once(info.php) で読み込んでデータベースに接続しています。 info.php は data というディレクトリに格納していますが、セキュリティのためにパーミッションを設定したほうがいいと聞いたのですが data と info.phpのパーミッションはいくつにしたらよいのでしょうか?
- sachi-999
- お礼率96% (186/192)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
info.php自体のパーミッションでしょうか。 その場合、あまり意味がない気がします。 CGIとして動くようなサーバーの場合は644とか600とかにしておいても良いかも知れません。 dataディレクトリのパーミッションもあまり意味がない気がします。 レンタルサーバーでも普通は755とかで問題ないと思います。 可能ならinfo.phpはドキュメントルートの外に置いた方がいいですね。 .htaccessとかが使えるなら、 Order Deny,Allow Deny from all とかにしておいた方が良さそうです。 それもダメならパーミッションって感じでしょうか。 レンタルサーバーによって違うので、レンタルサーバーの会社さんを書かれると、もっと正確な答えが解かっていいんじゃないですかね?
関連するQ&A
- MySQLでパスワードをrequireする意味
MySQLでデータベースを作成して、データベース認証させてコンテンツを表示するプログラムを書いているのですが、パスワードやユーザー名をルートディレクトリの外に置いてrequire_onceする意味が今ひとつわからないので教えて下さい。 require_once('../../../DBparameter.php'); // DBparameter.phpの中にパスワードやユーザー名 として、ルートディレクトリの外にDBparameter.phpを置けば確かに、パスワードやユーザー名を見ることはできませんが、このプログラムが存在するフォルダ内をのぞけるぐらいの詳しい人であれば、このプログラムを見るのは簡単にできると思うんですが、そうすると、 $con = mysql_connect(host, username, password); などとしてデータベースを開き、結局はデータベース内の情報を抜かれてしまうような気がするのですが、どうなんでしょうか? 確かに、データを抜き取るためのプログラムを他人のドメインにアップロードするのは簡単ではないので、ほとんど無理だとは思うんですが、それならばスクリプト内にパスワードやユーザー名をそのまま書いてもいいのではないかという気がするんです。
- ベストアンサー
- MySQL
- 動的ページで全ての情報を検索対象にする正しいやり方
■/(ルートディレクトリ) ├─□index.php ├─■actionディレクトリ(各ページ共通に使用するファイルを格納) │ ├─□contents.php │ ├─□header.php(contents.phpのheader部) │ ├─□left.php(contents.phpのleft部) │ ├─□right.php(contents.phpのright部) │ ├─□footer.php(contents.phpのfooter部) │ ├─□class-teisuu.php(定数を格納) │ ├─□class-kannsuu.php(関数を格納) │ └─□class-mysql.php(mysqlの接続とクエリ) ├─■contentsディレクトリ(各コンテンツの情報を格納) │ ├─■0001 │ │ └─■imageディレクトリ(そのコンテンツの写真を格納) │ │ └─□001~n.jpg -------------------------- 1266コンテンツまで繰り返し -------------------------- └─└─■1266 └─■imageディレクトリ(そのコンテンツの写真を格納) └─□001~n.jpg contents.php ------------ <?php require_once("header.php"); require_once("right.php"); require_once("left.php"); require_once("footer.php"); require_once("class-teisuu.php"); require_once("class-kannsuu.php"); require_once("class-mysql.php"); ?> PHPとMYSQLで作った動的ページがあります。 index.phpで見たいコンテンツの絞込をやり、 0001~1266コンテンツのどれか1ページを見れるようにします。 そのときにindex.phpからcontents.phpに$_GET['n']='1211'というように コンテンツを判別する値を渡すことで1211のページを開くことができます。 そして、ヤフーなどの検索から直接そのcontents.phpに来た時にちゃんと開くように (isset($_GET['n'])) ? $pegenumber=$_GET['n'] : $pegenumber='0777'; のようにして$pegenumberが空にならないようにしています。 そこまではいいのですが、SEOを考えたときに問題があるのでは?と疑問に思いました。 せっかく情報が1266分もあるのに、そのやり方だと0777以外は検索されないですよね? 外部から来たものへ全てのコンテンツを検索対象にするためには、 contents.phpをactionディレクトリに置くのではなく、 contentsディレクトリの各ディレクトリの中に置きます。 そして、$_GET['n']をなくして、各contents.phpに$pegenumber='コンテンツ番号' を直接指定したほうがそれぞれ検索されるようになり、ちゃんと中身も表示されるようになる。 この考えは正しいですか? ■/(ルートディレクトリ) ├─□index.php ├─■actionディレクトリ(各ページ共通に使用するファイルを格納) │ ├─□header.php(各ページのheader部) │ ├─□left.php(各ページのleft部) │ ├─□right.php(各ページのright部) │ ├─□footer.php(各ページのfooter部) │ ├─□class-teisuu.php(定数を格納) │ ├─□class-kannsuu.php(関数を格納) │ └─□class-mysql.php(mysqlの接続とクエリ) ├─■contentsディレクトリ(各ページの情報を格納) │ ├─■0001 │ │ ├─□contents.php($pegenumber='001'を格納) │ │ └─■imageディレクトリ(そのページの写真を格納) │ │ └─□001~n.jpg ---------------- 1266まで繰り返し ---------------- └─└─■1266 ├─□contents.php($pegenumber='1266'を格納) └─■imageディレクトリ(そのページの写真を格納) └─□001~n.jpg 0777ディレクトリのcontents.php ------------------------------ <?php $pegenumber='0777' require_once("../../action/header.php"); require_once("../../action/right.php"); require_once("../../action/left.php"); require_once("../../action/footer.php"); require_once("../../action/class-teisuu.php"); require_once("../../action/class-kannsuu.php"); require_once("../../action/class-mysql.php"); ?>
- ベストアンサー
- PHP
- パーミッションの環境
実行パーミッションを700 データファイルを600 CGI格納ディレクトリを705 データ格納ディレクトリを700 レンタルサーバーによっては上記設定でCGIスクリプト等のパーミッションを設定できます。 ですが、VineLinuxで構築したうちのサーバーでは、CGIのパーミッションを755に、 読書き用データファイルを666にしないと動作しません。 http://www.kent-web.com/support/faq/faq3-2.html#6 上記ページの説明にもありますように、700や600で設定できる環境のほうがセキュリティ上好ましいそうですが、方法がわかりません。 VineLinuxではこのような環境を構築することは不可能なのでしょうか?可能でしたら、方法、または参考になるサイトを紹介していただければ幸いです。
- 締切済み
- Linux系OS
- PDOでのデータベース接続について質問です
現在、PDOでのmysqlデータベースの操作を学習しています。 以前、mysql_connectでのデータベース接続を学習していた際に、 使用したいデータベースの名前を変数名$dbnameに格納し、 $connect = mysql_connect($server, $user, $password); mysql_select_db($dbname); でデータベースに接続していました。 その要領をふまえて PDOでもデータベースの名前を変数名$dbnameに格納し、 $db = new PDO('mysql:host=localhost;dbname=$dbname',$user,$password); で接続しようと試みたところ、エラーになりました。 そこで、データベース名を変数に格納せず、 $db = new PDO('mysql:host=localhost;dbname=データベース名',$user,$password); で試してみたところ、接続が出来ました。 そこで質問なのですが、PDOでデータベースに接続する場合、 データベース名を変数に格納することは物理的に出来ないのでしょうか? それともうひとつ質問があります。 mysql_connectを使用したときはデータベース接続用のPHPファイルを作成し、 データベース接続が必要なPHPファイルの時にrequire_onceでデータベース接続用のPHPファイルを呼び出ししていましたが、PDOでもデータベース接続用のPHPファイルを呼び出して接続することは可能でしょうか? 絶対に変数に格納したいとか、絶対にデータベース接続を別ファイルにしたいというわけではありませんが、もともとmysql apiで学習していたためmysql apiとPDOの違いが少し気になってしまいました。 ご回答、よろしくお願いします。
- ベストアンサー
- PHP
- PHPからMySQLの起動について
PHPからMySQLの起動について レンタルサーバーを借りてPHP,MySQLの勉強をしています。 PHPからMySQLの起動ができなくて困っていますので、教えていただきたいのですが、 <?PHP $dbkidou = mysql_connect("どこのサーバーか","ユーザー名","パスワード"); //データベースの起動ができなかった場合 if ($dbkidou == False) { print ("error"); exit; } $db = "データベースの名前"; ?> まずレンタルサーバーのドメインを「abc.com」としています。これに対するユーザー名が「def」、パスワードが「ghi」です。 そしてMySQLデータベースは「jkl_m」,「jkl_n」の2つを設けていて(phpMyAdminで作成しました)MySQLユーザ名が「opq」、パスワードが「rst」です。今回は「jkl_m」のサーバーを起動させたいのですが、上記PHP文の、 どこのサーバーか ユーザー名 パスワード データベースの名前 の各部分にどれを書けば良いのでしょうか? 何通りか試しているのですが、うまくいかないんです…
- ベストアンサー
- PHP
- akiraインターネットのパーミッション設定
akiraインターネットとレンタルサーバー契約をしています。PHPを使ってWebアプリを作ろうとしているのですが、パーミッション設定に泣かされています。。。 ./test (707) ./test/test.php (705) ./test/test2.txt (700) というファイル構成、パーミッション設定になっています。 test.php では test2.txt が存在するかどうか、書き込み可能かどうか、パーミッションはどうなっているかを出力するようにしてみました。 ----test.php------------------------ if ( (file_exists('test2.txt') )) { print "ファイルは存在します。"; }else{ print "ファイルは存在しません。"; } if ( (is_writable('test2.txt') )) { print "書き込みできます"; }else{ print "書き込みはできません"; } $perms=fileperms('test2.txt'); var_dump($perms); printf("%o\n",$perms); --------------------------------- 実行すると「ファイルは存在します。書き込みはできません。int(33216) 100700」 と表示されてしまいます。たぶんパーミッションの設定が悪いのだと思いますが、どうやったら書き込みできるようになるのかよくわかりません。 akiraのFAQでは 「モジュール版の PHP をご利用される場合は拡張子を PHP4 は .php 、PHP3 は .php3 として、パーミッションを 604 に設定してください。 モジュール版の PHP スクリプトを格納するディレクトリのパーミッションは 701(または705) に設定してください。PHPスクリプトからディレクトリ内のファイルに書き込みされる場合は 707 としてください。」 という記述があるのですが、?!?!です。 http://www.akira.ne.jp/support/start.htm#4 対処法などを教えていただけないでしょうか? お手数ですがよろしくお願いします。
- ベストアンサー
- レンタルサーバ・ASP
- OpenPNEの設定ができません。
OpenPNEの設定ができません。 サーバーはNSFレンタルサーバーで、 MySQL5、PHP5のオプションをつけています。 PHPやMyQSLについて全くの素人ですので、 wkyOpenPNEInstallerという自動インストールソフトを使って挑戦しています。 必要事項を記入してインストールを終えると、 Warning: require_once(/sns//config.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/html/(ドメイン)/public_html/config.inc.php on line 8 Fatal error: require_once() [function.require]: Failed opening required '/sns//config.php' (include_path='.:/usr/share/pear:/usr/share/smarty') in /var/www/html/(ドメイン)/public_html/config.inc.php on line 8 というエラーが出てきます。 上記エラー文中にある、config.inc.phpファイルは下記の通りです。 <?php /** * @copyright 2005-2008 OpenPNE Project * @license http://www.php.net/license/3_01.txt PHP License 3.01 */ define('OPENPNE_DIR', '/openpne_dir/' ); require_once OPENPNE_DIR . '/config.php'; ?> config.phpのパスが間違っているというようなエラーかと思い、 色々試しているのですが、うまくいきません。 関係がありそうなファイルのディレクトリ構造は、 現在のところ以下のようになっています。 -public_html -index.php -config.inc.php -他 -sns -config.php 色々調べてみると、php5では「require_once」が使えないとか出てきたり、 とにかくパスの指定やディレクトリが間違えていると出てきたりしているのですが、 全く改善ができません。 何かアドバイスを教えていただければと思います。 よろしくお願いいたします。
- 締切済み
- PHP
- Yomi-search(PHP)を設置する際のconfig.phpの設定
http://sql.s28.xrea.com/src/ の手順でYomi-sseach(PHP)を設置する際にconfig.phpの設定をしてサーバーへUPし、パーミッションの変更までしてみましたがセットアップ画面に行き着きません。どなたか詳しい方がいらっしゃいましたら、ぜひ教えて下さい!あほなので出来れば分かり易く具体的に・・・。贅沢行って申し訳有りません。詳細は以下のとおりです。 ・サーバー:ロリポップ ・MySQL:作成済み ・パーミッションは合っているかちょっと不明 <?php #データベース設定 $cfg = array( #'db_sql' =>'sqlite', #SQLサーバ名 'db_sql' =>'mysql', #SQLサーバ名 'db_host' =>'localhost', #SQLのホスト名 'db_user' =>'MySQLのユーザ名', #SQLのユーザ名 'db_password' =>'MySQLのパスワード', #SQLのパスワード 'db_database' =>'MySQLのデータベース名', #SQLのデータベース名 'sqltb' =>'ys_', #テーブルのプレフィックス ) ?> 上記のホスト名・テーブルのプレフィックスは意味が分かってないので自信ありません。
- 締切済み
- PHP
- パーミッションについて
こんにちは。お世話になっております。 あるサイトを作成しておりますが、そのサイトの機能の一部に、 サイト管理者がログインして書き換えられるphpファイル、txtファイル。 サイト訪問者が書き換えられる、phpファイル、txtファイル。 というものがあるのですが、レンタルサーバーでの運営において、上記ファイル、およびそのファイルが格納されているフォルダのパーミッションは、どのように設定したら宜しいのでしょうか? グーグルなどで検索して、パーミッションの設定をいくつか変えてはいるものの、正常に機能しない状況が続いています。 お忙しい中恐縮ですが、アドバイス頂ければと投函させていただきました。宜しくお願い申し上げます。
- ベストアンサー
- PHP
- PHPで作成したプログラムをレンタルサーバ上に置き、同じサーバ上にある
PHPで作成したプログラムをレンタルサーバ上に置き、同じサーバ上にあるMySQLからデータを取り出して表示するプログラムを作成しています。 今回、それとは別に社内LAN上にMySQLサーバがあり、レンタルサーバ上のPHPから社内LAN上のMySQLサーバにアクセスしたいと思い、次のようにプログラムしました。 $CON = mysql_connect('localhost', "ユーザ名", "パスワード"); mysql_select_db("データベース名"); $SQL = "SELECT * FROM tablename"; $RST = mysql_query($SQL); $DMAX = mysql_num_rows($RST); mysql_free_result($RST); $CON = mysql_close($CON); しかし、「データベースに接続出来ませんでした」と表示されてしまいます。 社内LANのMySQLサーバ上にPHPプログラムを置いたときはこれでアクセスできるので、レンタルサーバからは[localhost]ではまずいのかなとは思うのですが、どうしたらいいのか見当がつきません。 そのMySQLサーバのあるパソコンのLAN上での名前は分かっていますが、ネットワークの知識に乏しいもので・・・ どなたかヒントだけでもお願いできないでしょうか。
- 締切済み
- PHP
お礼
回答ありがとうございます。 今info.phpのパーミッションは644になっています。利用しているサーバは.htaccessは使えるみたいです。とても参考になりました。ありがとうございました!