Apache Module 개발에 대해서 질문 드립니다.

st.online의 이미지

안녕하세요. Apache Module 개발에 대해서 질문 드립니다.

아래 조건을 만족하는 샘플이나 방법 등의 조언을 부탁드리겠습니다.
1. POST body를 읽어서 파라미터를 체크한다.
2. 파라미터 값이 올바르면 Client가 요청한 PHP 페이지를 출력한다.
3. 파라미터 값이 올바르지 않으면 요청을 차단하고, 임의의 HTML code를 Client로 출력한다.
4. 2번의 경우, PHP에서도 POST 파라미터를 정상적으로 읽어올 수 있어야 한다.

아래는 제가 테스트한 내용들입니다.
- Developing modules for the Apache HTTP Server 2.4 ( http://httpd.apache.org/docs/trunk/ko/developer/modguide.html )
: ap_hook_handler 에서 처리하는 샘플로 위 4번을 충족하지 못할 것 같습니다.
: ap_hook_handler 에서 POST body를 읽으면 PHP에서 POST 파라미터를 가져오지 못하는 문제가 있습니다.

- mod_dumpost.c 모듈 (https://github.com/danghvu/mod_dumpost)
: filter 에서 처리하는 모듈로 위 3번 항목을 충족하지 못할 것 같습니다.
: filter 에서 임의의 HTTP code를 출력하면, 기존에 요청된 페이지에 코드가 추가되서 출력됩니다. 요청을 차단하고 임의의 HTML code를 출력할 수 있는 방법을 모르겠습니다.

- ap_hook_handler와 filter 의 조합
: ap_hook_handler 가 filter 보다 항상 먼저 호출되어서 위 조건들을 만족하게 만들지 못할 것 같습니다.

그럼 소중한 조언 부탁드리겠습니다.
감사합니다.

[내용 추가]
https://kldp.org/node/143328
https://kldp.org/node/143214

김정균의 이미지

제 판단에는 하시려는 것은 apache module로 하는 것이 더 비효과일 것 같습니다.

아마도, module에서 체크했을 때, 체크를 통과하는 비율이 훨씬 높을텐데, 이렇게 되면, apache module에서 post data parsing을 해야 하고, 그 이후에 또 php engine에서 또 하게 될테니, 비용낭비가 더 큽니다.

그냥 php 단에서 post data를 체크하셔서 처리하는 것이 비용이 훨씬 덜 들것으로 예상 됩니다.

st.online의 이미지

네.. 인지하고는 있는데, 일종의 방화벽같은 솔루션으로 PHP 소스를 건드리면 안되어서요.
혹, 질문드린 내용에 대해서 참고할 수 있는 부분이 있으면 답변 부탁드리겠습니다.

그리고..
PHP Extension에서 지원하는 부분도 고려해 봤는데..
PHP에서 PHP Extension의 함수를 콜하지 않고 (가장 최상위에서)HTTP Request를 핸들링 할 수 있는 방법이 있을까요?
IIS의 isapi나 apache module처럼..

답변 감사합니다.

김정균의 이미지

제가 말씀 드리는 것은 php source code를 고칠 필요 없이, php.ini의 auto_prepend_file 을 이용하시는 것을 말하는 겁니다.
즉, 이 옵션을 설정하면, php가 load할때 이 파일을 먼저 실행하게 되니, 원하시는 바를 php에서 처리가 가능할 것으로 보여서 말씀 드리는 것입니다.

st.online의 이미지

아, 도움이 많이 될 것 같습니다.
소스가 노출되면 안되니.. include된 파일에서 php extension 같은 걸 호출할 수 있으면 좋겠군요.
고객사와 충분히 협의해 볼만 할 것 같습니다.
답변 감사드립니다.

김정균의 이미지

php module은 php.ini에서 load 하시면 됩니다. auto_prepend_file 에 지정하는 것은 그냥 해당 서버 환경에서 php programming 하시는 것과 동일 합니다.

댓글 달기

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