[보안] 웹페이지를 직접 접근하는것을 막는 방법이 정녕 없는건가요...!?

theminerva의 이미지

지금 웹프로그램을 하나 짜고 있습니다.

실력이 미천하다보니 벌써 바닥을 들어내고있네요.

다름아니라 웹페이지를 직접 접근하는것을 막아버리는 방법을 알고싶습니다.

b.php라는 페이지를 aaa.com 내부에서만 접근 가능하게 하고 싶습니다.

여기서 말하는 내부접근이란 aaa.com/b.php으로 접근하면 거부하고, ../b.php 같은 상대경로로 접근되는 페이지여만 허가하는... 그런!

것을 원합니다.

referer를 쓰면 되지만, 리퍼러는 변조가 가능하다고 들었습니다.

즉, 서버내에서 실행된것은 결과값이 출력되지만, 사용자가 url로 호출한것은 거부하는 방법이 있을까요?

SSL 도 생각해보고 웹방화벽이든 뭐든 별걸다 생각해봤지만 답이 안나왔습니다.

일단 Get으로 넘기는 방법인데, POST를 넘겨봤자 폼스푸핑을 당할것을 생각하니 별다른 차이가 없어보입니다.

결국 POST를 써도 임시 방편이라는 생각밖에 들지 않는데 이것을 원천적으로 차단하는 방법이 있을까요?

고수님들의 답변을 기다립니다....

이것도 저것도 못한다면 다른 팁이 있으면 소개시켜주시면 정말 감사하겠습니다 ㅜㅜ....

dcmru의 이미지

웹페이지 상에서의 제어가 아니라 접근 제어 제품으로 막는 것은 어떨까요?
-------------------------------------------------------
노력만이 살길이다.

노력만이 살길이다.

theminerva의 이미지

만약 윗분 방법이 없다면 ㅜㅜ 접근제어 제품 하나 알려주시면 안될까요?

dcmru의 이미지

방화벽이나 VPN, 서버 보안 제품들이 있을 것 같네요. 아니면, OS가 리눅스라면 iptable 같은 것을 쓰면 어떨까요?
-------------------------------------------------------
노력만이 살길이다.

노력만이 살길이다.

thames의 이미지

홈페이지 접속시 세션을 발생시켜서 뭐 제어한다거나 방법이 있지 않을까요?
──────────────────────────────────


──────────────────────────────────

lqez의 이미지

이해하기 좀 어려운 질문이네요.
사용자가 접근할 수 없는 페이지를 만들고 싶으시다면, 해당 페이지는 웹 서비스단에서 접근 못하는 장소에 놓아두시면 되지 않나요?

일반적으로는, a.php에서 b.php를 include해서 쓰고자 할 때, b.php에 대한 직접 접근을 제한하기 위해 a.php에서만 define하고 있는 값의 존재 여부를 판별하는 방법을 쓰기도 하는데요, 상황이 어떤 것인지 이해하기 어렵습니다..

처해계신 상황을 더 상세하게 말씀해주시면 도움 주실 분이 나타나리라 생각합니다.

송효진의 이미지

아무나 보는 것을 막을 만큼 보안적인 문제가 있는 것은 아니고,
단지 외부에 링크가 퍼지는 것을 막고자 하는거라면,
리퍼러 체크 만으로 충분합니다.
변조고 뭐고간에 링크를 걸어 들어오는 일반적인 동작은 안되니까요.
변조는 브라우저로 아무나 할 수 있는 것은 아닙니다.

로봇이 가져가는 것을 막는 것은 $_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.0' 을 막는걸로 99% 의 효과를 발휘할겁니다.

그 이외의 사태는 '사람이 하는 동작은 다 자동화 할 수 있습니다.'
분석 프로그램이 제대로 발달하지 못한 분야를 이용한 captcha 같은걸로 막거나,
인증된 회원만 접근할 수 있게 해야죠.

스푸핑은 https 면 됩니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

theminerva의 이미지

Ajax로 php의 대한 결과값을 javascript로 받아오는 형식입니다.

문제는 서버내에서 호출할때나, 사용자가 임의로 웹페이지에서 접근하나, 서버내에서는 정상적인 접근으로 판별하기때문에

웹페이지에서 접근하는 방법을 막고싶을뿐입니다...

예를들어,

http://hostname.com/b.php?key=1234

이런 형식의 주소가 있을때, b.php에서는 key값을 신뢰해서 1234를 DB에 쿼리합니다. 물론 이스케이프 시켜서 문자를 벗겨내겠죠.

허나 저는 웹페이지 주소창에 임의로 저런 주소를 쳐서 접근하는것을 막고싶습니다....

방법이 없을까요!? ㅜㅜ...

가입된 회원을 대상으로 한다는 전제입니다...

세션을 이용해봤는데, 동적 토큰을 해도 별 소용이 없는것 같더라구요..

송효진의 이미지

스쿨에 질문하셨던 분인가보군요.
로그인 된 회원을 대상으로 하면서 post 조차 신뢰할 수 없으면 더 이상 할 수 있는 것이 없습니다.
유효한 값인지 일일히 체크하는것은 당연히 모든 곳에서 이루어져야 합니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

junilove의 이미지

서버 보안과 웹방화벽에서 처리가 가능하지 않을까요? selinux, mod_security.

shanew00의 이미지

onload될때 index.html을 거친 page에 한해서 b.php에 접속하게끔.. java script로 처리+_+

<script LANGUAGE="JavaScript">
var requiredfrom = "index.html"; // required prev. page
if (document.referrer.indexOf(requiredfrom) == -1) {
alert("반드시 이 페이지를 거쳐 들어오셔야 합니다 " + requiredfrom);
window.location=requiredfrom;
}
</script>

이거외엔 모르겠네요; get방식말고 post를 사용하시고

스푸핑때문이라면 https를 사용하시길..

Jun92의 이미지

웹서버가 방화벽 뒤에서 80포트만 열려 있다는 가정하에

두개의 서버(A,B)에
서버A: a.php -> 포트번호 80으로 public
서버B; b.php -> 여기는 포트번호를 8080같이 외부로 열려있지 않는 포트를 씁니다.
A와 B는 같은 네트웍상에 존재.

a.php는 b.php를 curl로 호출해서 가져옴.
외부에서는 b.php를 호출 불가능.

곰곰히 생각해보니 virtualhost로 서버 한대로도 될수도 있겠네요.

이런식으로 서버와 네트웍을 구성하면 되지 않을까요?

=============================
야후!

lacovnk의 이미지

1. 일단 URL이 외부에 공개되어 있다면, 외부에서 직접 접근을 막기는 불가능.

기본적으로 웹이 stateless 하기 때문에 state를 추적하기 위해 쿠키나 세션을 이용하는데 이는 연결 흐름만을 추적하지, 어떤 경로로 오는지를 결정할 수는 없습니다.
예를 들면 사용자가 "정상적으로" 웹브라우저에서 클릭해서 이동한 것을 언제나 동일하게 흉내낼 수 있습니다.
복잡한 handshake 을 플러그인으로 구현해서 감춰버리면 되긴 하는데.. 그러면 범위가 넘어가죠? ㅎㅎ

2. 그러므로 아예 해당 페이지 처리 내용을 서버 내로 숨겨버려야합니다. 위에 lqez, Jun92님이 쓰신 방법이 그런 방법이죠.

이런거 무시했다가 구글에 털리고 인증 우회니 뭐니 기사 나오는 듯?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.