2016-03-27 5 views
1

私は新しいことを学びながら遊んでいます。現在ログインしている場合は、自分のサイトにログインして別のページにアクセスするための作業をしています。現在ログインしているログインフォームがあります。誰かがログインしているかどうか、ログインページにリダイレクトしていないかどうかを確認できるセッション変数セット。ここでそれはどのように動作し、私の問題です。私は一度ログインしたログインページを持って、Home.phpと言うように指示します。これ以外は素晴らしいことですが、私はurlから直接home.phpに行くことができます。その人がログインしていなくてもmysite.com/home.phpにアクセスすることができます。URLを入力してバックエンドスクリプトにアクセスしないようにするにはどうすればよいですか?

これを修正するには2つのことを試みました。私はHome.phpのためにこれを試みた:

<?php 

session_start(); 

if(isset($_SESSION["Authenticate"])){ 

<!DOCTYPE html> 
<html lang="en"> 

<head> 
    <meta charset="utf-8"> 
</head> 

<body> 
    <?php include "structure/header.php" ?> 

     <div class="cmsPanel"> 

     <a href="php/cms/logoutProcess.php">Logout</a> 

     <div id="AddEditor"> 
      <form method="POST" action="php/cms/newEditor.php"> 
      <input class="loginFields" type="text" name="name" placeholder="First Name"> 
      <input class="loginFields" type="email" name="email" placeholder="Email"> 
      <input type="submit" value="Create New Editor"> 
      </form> 
     </div> 

     <div id="manageEditors"> 

      <div> 

      </div> 
     </div> 
     </div> 

      <?php include "structure/footer.php" ?> 
</body> 

</html> 

} 
else{ 

    header("Location: login.php"); 
} 
?> 

これはうまくいかなかった。私はエラー500と空白のページに終わるだろう。

<?php 

session_start(); 

if(isset($_SESSION["Authenticate"])){ 

    include_once('php/cms/EditorPanel.php'); 
} 
else{ 

    header("Location: login.php"); 
} 
?> 

あなただけmysite.com/php/cms/Editorpanel.phpに移動し、ログインをバイパスすることができ除き、作品:だから私はちょうど私がこのような何かを行うことができます考え出し解決策を考え出すしようとしています。これにより、誰かがmysite.com/php/cms/newEditor.phpや自分のサーバー上にある他のバックエンドスクリプトなどに直接アクセスできることもわかりました。個人的に私はhome.phpのすべてを持っている最初の試みを使用できるようにしたいと思っていますが、私のサーバー上の他のバックエンドスクリプトに誰かがアクセスするのを防ぐ方法も理解する必要があります。

私はちょうどcmsフォルダのhtaccessを使用し、それにすべてのDenyを追加することができると考えましたが、これによってバックエンドスクリプトが実行されなくなります。私はcgi-binを使用できますか?どうすれば私はそれにアクセスできますか?私のftpでは、ルートディレクトリwwwの外に何も追加することはできません。ルートが確立されたホストの内部に新しいルートディレクトリを指定する方法はありますか?

答えて

0

Home.phpはHTMLと混在したPHPスクリプトです。あなたはあなたのPHPからあなたのhtmlを分離する必要があります。 htmlを始める前にphpタグを閉じてください。これはあなたの最初の問題に役立つはずです。 @Pablo Floresの答えは正しい方向に向けるべきです。

<?php 

session_start(); 

if(isset($_SESSION["Authenticate"])){ 
?> 

<!DOCTYPE html> 
<html lang="en"> 

<head> 
    <meta charset="utf-8"> 
</head> 

<body> 
    <?php include "structure/header.php" ?> 

     <div class="cmsPanel"> 

     <a href="php/cms/logoutProcess.php">Logout</a> 

     <div id="AddEditor"> 
      <form method="POST" action="php/cms/newEditor.php"> 
      <input class="loginFields" type="text" name="name" placeholder="First Name"> 
      <input class="loginFields" type="email" name="email" placeholder="Email"> 
      <input type="submit" value="Create New Editor"> 
      </form> 
     </div> 

     <div id="manageEditors"> 

      <div> 

      </div> 
     </div> 
     </div> 

      <?php include "structure/footer.php" ?> 
</body> 

</html> 
<?php 
} 
else{ 

    header("Location: login.php"); 
} 
?> 
+0

ありがとうございます。私は完全にそれを見ている。 – Vaprx

0

ユーザーがログアウトしたときにセッションをクリアする必要があります。また、各ページでセッションが空であるかどうかを確認する必要があります。

+0

最初の問題は解決されました。私が今問題になっているのは、URLを使用して直接行くとバックエンドスクリプトが公開されることです。 – Vaprx

0

多くのWebフレームワークで使用されているソリューションは、何らかのディスパッチャを使用しています。

ですから、次のようにあなたのサイトのルートにある.htaccessファイルかもしれない:

RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php to dispatch request 
RewriteRule . index.php 

そして、あなたはすべての要求を拒否htaccessファイルを追加することができ、ソースコードを置くディレクトリの内部を

あなたのindex.phpインサイド
deny from all 

だけで、ユーザーが要求されたURLと、必要に応じてファイルを含めたルータfuctionallityのいくつかの種類を確認するために$ _SERVER [「REQUEST_URI」]を解析する必要があります。

チェックアウトSlimフレームワークは、より堅牢なaproachを表示するには

EDIT

使用することができる最も簡単なものは以下の通りです:あなたのよう

内のindex.php

var_dump($_SERVER['REQUEST_URI']);//For debugging purposes, so you could check the url 
if(strstr($_SERVER['REQUEST_URI'],"private.php")){//if the url requested the file private.php inside the private directory 
require_once './private/private.php'; //include the file 
} 

見ることができます、ユーザーは直接ソースコードのいずれかにアクセスすることはできませんif文の中であなたが望むすべてのセッション検証を追加することができます要求を前処理することはできません。この方法では、ユーザーがアクセスできるすべてのファイルを完全に制御することができます

+0

ディレクトリからすべてのファイルを拒否してどのようなファイルにアクセスすればよいのですか?これを行うと403エラーが発生します。私はそれが何かを解析する必要があるインデックスについてのあなたの説明の最後の部分と関係していると思っていますか? – Vaprx

+0

ありがとう!できるだけ少数のフレームワークを使用しようとしています。それで私は自分のものがどのように機能するかを理解することができます。私のマシンはプロジェクトを持っているわけではありませんが、何が起きているのかを見て、私の問題をちょうど解決したと確信しています。両方の回答を受け入れる方法があれば、私は間違いなくそうでした! – Vaprx

+0

OKなので、私は何か間違っているのでしょうか?私はそれを試して何も変わっていない。だから、私がしたことをheres。このコードをeditorLogin.phpページに挿入し、ifファイルのファイル名をloginProcess.phpに変更し、php/cms/private.phpのようなログインプロセスが必要になりました。私はパブリックフォルダからすべてのスクリプトを含むphpフォルダをプルするはずでしたか? – Vaprx

関連する問題