[질문] Web Programming 에서 접근 제한하는 방법 ?

sDH8988L의 이미지

안녕하십니까...

저는 지금 CGI를 이용하여 작은 Web Site를 만들고 있습니다...

그런데, 보안이 문제가 되더군요...

Site에는 cgi file 말고도 그냥 html file도 상당히 많은데요...

기본적인 login 관리는 Cookie를 이용해서 하고 있습니다...

그러다 보니 cgi file에서는 Cookie Check를 할 수 있지만, html file들에서는 그리 할 수가 없더군요...

다시 말해, login 과정을 거치지 않고 주소창에 직접 내용의 html file을 적어서 들어오는 경우를

막기가 힘들다는 거죠...

물론, 많이 쓰는 Access Control 방법인 .htaccess를 쓰를 방법이 있지만, 이건 login 하고는 상관없이

동작하는 것이기 때문에 좀 꺼려지는 부분이 있습니다...
(혹은 사용자 DB의 내용을 또 다른 곳(.htpasswd)에 관리해야 하는 부담이 있어서요...)

요약을 하자면, 제가 하고 싶은 일은 Site의 어떤 File이건(cgi, html 모두) 간에 login 과정을 거치지

않고는 직접 접근 할 수 없게 하고 싶고 login을 하게 되면 전부 Access가 가능하도록 하고 싶은 것입니다.

어떻게 해야 하겠습니까 ???

dotri의 이미지

HTML 파일을 외부에 숨길수 있을것같습니다. HTML 을 읽어서 뿌려주는 cgi 를 하나 따로 두면 될듯한데요.

1) HTML 파일에 대한 해쉬를 만듬(URL 에서 파일명이 보이면 안되니까)
a.html -- (해쉬) --> z.html

2) 해쉬를 받아서 해당 HTML 파일을 읽어서 뿌려줌
document.cgi?page=z.html

3) 사용자는 a.html 의 존재를 알 수 없고, document.cgi 에서는 쿠키를 처리할 수 있음.

sDH8988L의 이미지

흠...

html file을 1차로 숨기기에 좋은 방법인 듯 합니다...

그렇지만, 많은 html file 내부에 있는 hyperlink 들을 어떻게 처리해야 할 지가 문제가 될 수도 있겠네요...

예를 들자면, image가 1000장이 있어서 이것을 Picasa를 이용하여 Web Page 형식으로 만든다면, html page가

1000개 이상이 나오게 됩니다... 물론, 아주 단순한 것들이죠... 문제는 이 html file들 내부에 많은 link

들이 있다는 겁니다... dotri님께서 말씀하신 방법으로 하려면, link click을 실행하기 전에 cgi를 실행할 수

있어야 할 거 같은데요...

아무래도 디렉토리에 뭔가 제한을 두는 것이 가장 간단한 방법일 거 같습니다...

아니면 login 시에 Cookie를 setting하면서 .htaccess file에 login 한 것 같은 처리를 하는 것이겠죠...

그런데, 그 .htaccess file에 login 한 것처럼 하는 code를 어떻게 할 지를 모르겠씁니다...

dotri의 이미지

오픈소스 웹파이어월을 사용해보는건 어떠실지요? Apache 의 모듈형태로 탑재되는것들도 있습니다.

익명사용자의 이미지

dotri 님이 쓰신대로 static content를 읽어 client쪽으로 전송하는 cgi를 만들고,
rewrite rule을 적용하여 static content의 위치를 cgi쪽으로 전달하면 되겠죠.

이를테면

RewriteRule /html/(.*) /cgi-bin/htmlagent.cgi?file=$1

간단하게 이 한줄 만으로도 html 컨텐트를 보호할 수 있을 것입니다.
로그인 관리는 해당 htmlagent.cgi에서 처리하면 되니까요.
(물론 특정 파일을 읽어 전송하는 cgi는 보안에 특히 조심하셔야 할겁니다.
읽어들이는 directory에 대한 제약사항이 없으면 정말 위험하겠죠.)

또 한가지 방법으로는,
mod_rewrite 문서를 잘 읽어보시면 rewrite condition을 사용하여 cookie variable과 같은 값으로
rewrite rule을 생성할 수도 있습니다.

(이를테면 로그인 한 경우는 cgi를 안통하고 바로 file에 액세스를 하게 하지만 로그인을 안한 경우는
로그인 페이지로 이동하는 것도 가능..할겁니다. ^^; 관련 기능을 직접 써본적은 없어서...)

참고하시면 될듯 하네요.

cjh의 이미지

apache를 쓰신다고 가정하면 로그인 쿠키를 체크하는 access control 필터를 (C나 perl등으로) 하나 만드셔서 html 확장자에 끼워넣으면
될것 같네요.
http://perl.apache.org/docs/tutorials/tips/mod_perl_tricks/mod_perl_tricks.html#Access_Control
http://www.modperl.com/book/chapters/ch6.html#Cookie_Based_Access_Control
--
익스펙토 페트로눔

--
익스펙토 페트로눔

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.