23

私は父のウェブサイトを構築するためにPHPとJavaScriptを使用しています。彼は彼のウェブサイトにログインシステムを組み込みたいと思っています、そして私はPHPを使ったシステムのデザインを持っています。私の問題は、その人がログインしている場合にボタンを表示するにはどうすればよいですか?

たとえば、ホーム製品会社概要連絡先があります。ユーザーがログインしている場合は、ディーラーディストリビューター、およびその他の情報のボタンが必要です。したがって、ホーム製品会社概要連絡先、ディーラー(ディーラーログインの場合)、ディストリビューター(ディストリビューターログインの場合)などがあります。前方へ。

JavaScriptはこれを行うための良い方法でしょうか、それともPHPでしょうか、あるいはその両方でしょうか?JavaScriptを使用してボタンを表示および非表示にし、PHPを使用して表示するボタンを確認します。

4

6 に答える 6

20

セキュリティに関しては、クライアントからのものを信頼することはできません:

  • 訪問者はすべてのコード (PHP ではなく、HTML と Javascript) を見て何かを試すことができます。
  • 訪問者はブラウザを使用することすらできません。スクリプトを使用してリクエストを送信するのは簡単です

これは、ボタンを非表示にすることが適切なユーザー インターフェース デザインであることを意味します (ログインしていないとボタンを使用できないため)。しかし、それはセキュリティ機能ではありません。セキュリティ機能は、それを必要とする各アクションの前に、訪問者がログインしていることをサーバー上でチェックしています。

ボタンを表示するつもりがない場合は、HTML と画像をブラウザに送信してから Javascript で非表示にするのは役に立ちません。PHPで確認してみます。

于 2008-08-10T07:59:22.890 に答える
9

メニューファイルまたはw/eに次のように入力します。

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

次に、認証が必要なページでは、次のようにします。

<?php 
    require 'auth.php';
    require_login();
?>

auth.phpに含まれる可能性のある場所:

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>
于 2008-08-11T01:35:58.187 に答える
2

javascriptを使用してボタンを非表示にすると、アプリケーションにセキュリティホールが開きます。悪意のあるユーザーは、JavaScriptを無効にするか、独自のJavaScriptを適用してセキュリティを回避する可能性があります。

PHPを使用して、ボタンをレンダリングするかどうかを選択することをお勧めします。私はこれを.NETで頻繁に行います。

ユーザーが制限付きボタンを使用しようとするときはいつでも、サーバー側でユーザーのアクセスを確認できるはずです。

于 2008-08-10T04:02:56.520 に答える
1

私の仕事で行ったことは、ユーザーがログインしているかどうかを確認するなどの機能を提供するライブラリを用意することです。次に例を示します。

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

認証されたユーザーのみが表示する必要があるページの場合、コントローラーはユーザーがログインしているかどうかを確認し、ログインしていない場合はログインページにリダイレクトします。

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}
于 2008-08-11T01:23:45.187 に答える
1

Everything that Christian Lescuyer wrote is correct. Notice, however, that he said "I would" and not "you should". The choice is not that easy.

First of all, security is not an issue in the choice. You should have security check on server when you execute an action. Which code decides to show/hide the button that leads to the action is irrelevant.

That leaves us with only one drawback of doing show/hide logic in Javascript - the HTML sent to user is bigger than necessary. This may not be a big deal.

Having show/hide logic in PHP does have a minus, though. The PHP code required is usually a tag soup. Akira's code provides a good example of how it is usually done.

Corresponding Javascript code would probably look something like this:

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(assuming that elements that could be hidden have display:none by default).

This style also allows nice "Ajax" scenario: user sees a page w/o secret area, inputs password, sees the secret area all without refreshing the page.

So, if you already have a script that runs when your document load for other reasons, I would seriously consider having show/hide logic there.

于 2008-08-25T18:32:29.000 に答える
0

基本的に、メニューがhtmlである場合、たとえばリストとして、最後の項目の<ul> <li>Home</li> </ul>後にphpを追加します。</li>

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?> 
于 2009-09-18T18:50:19.703 に答える