문제

저는 아버지의 웹사이트를 구축하기 위해 PHP와 JavaScript를 사용해 왔습니다.그는 자신의 웹사이트에 로그인 시스템을 통합하기를 원하며 저는 PHP를 사용하는 시스템 설계를 갖고 있습니다.내 문제는 그 사람이 로그인한 경우 버튼을 어떻게 표시합니까?

예를 들어 - 당신은 , 제품, 회사 소개, 그리고 연락하다.버튼을 갖고 싶어요 상인, 유통 업체, 사용자가 로그인한 경우 기타 정보일 수도 있습니다.그래서 나는 가질 것이다 , 제품, 회사 소개, 콘택트 렌즈, 딜러(딜러 로그인 시), 유통 업체 (디스트리뷰터 로그인인 경우) 등.

JavaScript가 이를 수행하는 좋은 방법일까요, 아니면 PHP일까요, 아니면 둘 다일까요?JavaScript를 사용하여 버튼을 표시하거나 숨기고, PHP를 사용하여 표시할 버튼을 확인합니다.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

도움이 되었습니까?

해결책

보안에 관해서는, 당신은 클라이언트로부터 오는 것을 믿을 수 없습니다:

  • 방문자는 귀하의 모든 코드(PHP가 아닌 HTML 및 Javascript)를 보고 시도해 볼 수 있습니다.
  • 방문자는 브라우저를 사용하지 않을 수도 있습니다.스크립트를 사용하여 요청을 보내는 것은 매우 쉽습니다.

이는 버튼을 숨기는 것이 좋은 사용자 인터페이스 디자인임을 의미합니다(로그인하지 않으면 버튼을 사용할 수 없기 때문입니다).하지만 보안 기능은 아닙니다.보안 기능은 방문자가 필요한 각 작업 전에 방문자가 로그인되어 있는지 서버에서 확인하는 것입니다.

버튼을 표시하지 않으려는 경우 HTML과 이미지를 브라우저로 보낸 다음 Javascript로 숨기는 것은 유용하지 않습니다.PHP로 확인해 보겠습니다.

다른 팁

메뉴 파일에 또는 다음을 입력합니다.

<? 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;
        }
    }
?>

자바스크립트를 사용하여 버튼을 숨기면 애플리케이션에 보안 구멍이 생깁니다.악의적인 사용자는 보안을 우회하기 위해 자바스크립트를 비활성화하거나 자체 스크립트를 적용할 수 있습니다.

버튼을 렌더링할지 여부를 선택하려면 PHP를 사용하는 것이 좋습니다.저는 .NET에서 이 작업을 자주 수행합니다.

제한된 버튼을 사용하려고 할 때마다 서버 측에서 사용자의 액세스를 확인할 수 있어야 합니다.

내 작업에서 우리가 한 일은 사용자가 로그인했는지 확인하는 것과 같은 기능을 제공하는 라이브러리를 갖는 것입니다.예를 들어:

<?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();
}

Christian Lescuyer가 쓴 모든 내용은 정확합니다.그러나 그가 "해야 한다"고 말한 것이 아니라 "내가 할 것이다"라고 말했다는 점에 유의하십시오.선택은 그리 쉽지 않습니다.

우선 선택에 있어 보안은 문제가 되지 않습니다.작업을 실행할 때 서버에 대한 보안 검사를 받아야 합니다.작업으로 연결되는 버튼을 표시하거나 숨기기로 결정하는 코드는 관련이 없습니다.

따라서 Javascript에서 표시/숨기기 논리를 수행하는 데에는 단 한 가지 단점이 있습니다. 즉, 사용자에게 전송되는 HTML이 필요한 것보다 큽니다.이것은 큰 문제가 아닐 수도 있습니다.

그러나 PHP에 표시/숨기기 논리가 있으면 단점이 있습니다.필요한 PHP 코드는 일반적으로 태그 수프.Akira의 코드는 이것이 일반적으로 어떻게 수행되는지에 대한 좋은 예를 제공합니다.

해당 Javascript 코드는 아마도 다음과 같습니다.

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

(숨길 수 있는 요소에는 기본적으로 display:none이 있다고 가정).

이 스타일은 또한 멋진 "Ajax" 시나리오를 허용합니다.사용자는 비밀 영역이 없는 페이지를 보고, 비밀번호를 입력하고, 페이지를 새로 고치지 않고도 비밀 영역을 모두 볼 수 있습니다.

따라서 다른 이유로 문서가 로드될 때 실행되는 스크립트가 이미 있다면 여기에 표시/숨기기 논리를 진지하게 고려할 것입니다.

기본적으로 html로 된 메뉴가 있는 곳은 목록입니다. <ul> <li>Home</li> </ul> 나중에 PHP를 추가하면 </li> 마지막 항목 중:

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

<li>My Account</li>

<?php  
  }
?> 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top