Spac은 URL 을 분석하여 실행할 액션클래스를 찾아 실행하는데, 이때 호출되는 URL에 실행되는 액션클래스명이 노출되게 됩니다.
여러가지 이유로 노출되는 클래스명을 감추고 싶은경우 클래스매핑을 통해 호출되는 클래스와 실제 실행되는 클래스를 다르게 지정할 수 있습니다.
클래스매핑은 ActionClassMapping.ini 파일에의해 작동되므로 이 파일을 수정하여 사용합니다.
먼저 "ActionClassMapping.ini" 파일의 내용을 보면 아래와 같습니다.
세번째 줄 부터 실제 사용할 클래스명을 설정합니다.
세번째 줄의 변수명인 "Welcome"은 URL로 이 "Welcome" 이 호출되면 값인 "HelloSpac" 이 실행되게 합니다.
즉, http://www.mydomain.com/Welcome 이 호출되면 실제는 http://www.mydomain.com/HelloSpac 이 실행됩니다.
그렇다면 http://www.mydomain.com/HelloSpac 을 직접 호출되면 어떻게 될까요?
"HelloSpac" 의 실행결과 값이 그대로 출력됩니다.
위의 예처럼 실제 실행되는 클래스는 "HelloSpac" 이지만 웹에서 호출할땐 "Welcome" 을 사용하고
"HelloSpac" 이 호출되면 거부 응답을 하고 싶다면???
먼저 "HelloSpac" 이 호출될 경우 응답할 액션클래스를 생성합니다.
아래처럼 만들어 봅니다.
거부응답을 보여줄 클래스명을 "Deny.Class.php" 로 해봅시다.
* Spac/model/Deny.Class.php
거부 응답을 보여줄 "Deny" 클래스를 만들었습니다.
이제 "ActionClassMapping.ini" 에 거부응답 클래스를 등록해 줍니다.
위처럼 설정하게 되면
1. http://www.mydomain.com/Welcome 이 호출되면 "HelloSpac" 클래스가 정상적으로 실행됩니다.
2. http://www.mydomain.com/HelloSpac 이 호출되면 "Deny" 클래스가 호출됩니다.
결론적으로 "HelloSpac" 를 실행하기 위해선 "Welcome" 을 호출해야만 하고 직접 "HelloSpac"을 호출하게되면 거부응답인 "Deny"를 보여줍니다.
직접 접근을 막고 싶은 클래스는 위와 같이 Deny 클래스를 매핑하여 외부에 해당 클래스의 노출을 막을 수 있습니다.
* 클래스매핑에 설정하는 접근클래스명은 Spac 클래스명명규칙을 따르지 않습니다.
: Spac 에서 액션클래스명은 알파벳이나 숫자로 이루어져야 하며 첫글짜는 반드시 알파벳대문자로 시작해야 하는 규칙이
있지만, 클래스 매핑을 통해 접속을 하도록 하는경우에는 이 규칙을 따르지 않아도됩니다.
따라서 클래스매핑을 통해 URL 을 복잡하게 구성할 수도 있습니다.
ActionClassMapping.ini
구성해도 Spac에서 클래스매핑에 따라 "HelloSpac" 의 처리를 문제없이 수행합니다.
여러가지 이유로 노출되는 클래스명을 감추고 싶은경우 클래스매핑을 통해 호출되는 클래스와 실제 실행되는 클래스를 다르게 지정할 수 있습니다.
클래스매핑은 ActionClassMapping.ini 파일에의해 작동되므로 이 파일을 수정하여 사용합니다.
먼저 "ActionClassMapping.ini" 파일의 내용을 보면 아래와 같습니다.
;ActionClass Mapping
[Class]
Welcome = HelloSpac
[Class]
Welcome = HelloSpac
세번째 줄 부터 실제 사용할 클래스명을 설정합니다.
세번째 줄의 변수명인 "Welcome"은 URL로 이 "Welcome" 이 호출되면 값인 "HelloSpac" 이 실행되게 합니다.
즉, http://www.mydomain.com/Welcome 이 호출되면 실제는 http://www.mydomain.com/HelloSpac 이 실행됩니다.
그렇다면 http://www.mydomain.com/HelloSpac 을 직접 호출되면 어떻게 될까요?
"HelloSpac" 의 실행결과 값이 그대로 출력됩니다.
위의 예처럼 실제 실행되는 클래스는 "HelloSpac" 이지만 웹에서 호출할땐 "Welcome" 을 사용하고
"HelloSpac" 이 호출되면 거부 응답을 하고 싶다면???
먼저 "HelloSpac" 이 호출될 경우 응답할 액션클래스를 생성합니다.
아래처럼 만들어 봅니다.
거부응답을 보여줄 클래스명을 "Deny.Class.php" 로 해봅시다.
* Spac/model/Deny.Class.php
<?php
class Deny extends Controller {
function Deny() {}
function execute() {
echo "Access Denied";
}
}
?>
class Deny extends Controller {
function Deny() {}
function execute() {
echo "Access Denied";
}
}
?>
거부 응답을 보여줄 "Deny" 클래스를 만들었습니다.
이제 "ActionClassMapping.ini" 에 거부응답 클래스를 등록해 줍니다.
;ActionClass Mapping
[Class]
Welcome = HelloSpac
HelloSpac = Deny
[Class]
Welcome = HelloSpac
HelloSpac = Deny
위처럼 설정하게 되면
1. http://www.mydomain.com/Welcome 이 호출되면 "HelloSpac" 클래스가 정상적으로 실행됩니다.
2. http://www.mydomain.com/HelloSpac 이 호출되면 "Deny" 클래스가 호출됩니다.
결론적으로 "HelloSpac" 를 실행하기 위해선 "Welcome" 을 호출해야만 하고 직접 "HelloSpac"을 호출하게되면 거부응답인 "Deny"를 보여줍니다.
직접 접근을 막고 싶은 클래스는 위와 같이 Deny 클래스를 매핑하여 외부에 해당 클래스의 노출을 막을 수 있습니다.
* 클래스매핑에 설정하는 접근클래스명은 Spac 클래스명명규칙을 따르지 않습니다.
: Spac 에서 액션클래스명은 알파벳이나 숫자로 이루어져야 하며 첫글짜는 반드시 알파벳대문자로 시작해야 하는 규칙이
있지만, 클래스 매핑을 통해 접속을 하도록 하는경우에는 이 규칙을 따르지 않아도됩니다.
따라서 클래스매핑을 통해 URL 을 복잡하게 구성할 수도 있습니다.
ActionClassMapping.ini
;ActionClass Mapping
[Class]
d90f7f896g5jh7467fg58df7g89df6g8df7g5h6DFA3jjd7sg____ = HelloSpac
위 예제처럼 클래스명을 "d90f7f896g5jh7467fg58df7g89df6g8df7g5h6DFA3jjd7sg____" 와 같이 임의의 문자를 복잡하게 [Class]
d90f7f896g5jh7467fg58df7g89df6g8df7g5h6DFA3jjd7sg____ = HelloSpac
구성해도 Spac에서 클래스매핑에 따라 "HelloSpac" 의 처리를 문제없이 수행합니다.