문제
저는 아버지의 웹사이트를 구축하기 위해 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
}
?>