PHP로 간단한 예제 돌려보는데 입력된 변수가 전달되지 않습니다

undo512의 이미지

111.html

<form method="POST" action="xxxxx.php">
...
...
<textarea name="comment" cols="50" rows="10"></textarea>
...
....

==================

xxxxx.php

<? echo($comment); ?>

이렇게 111.html 파일에서 자바스크립트로 입력을 받아서 xxxxx.php 파일에서

웹브라우저에 출력하는 간단한 건데요...

아무것도 출력되지 안네요..

제가 APM을 리눅스에서 한번 해볼라고 소스 컴파일해서 세개모두

설치했는데요.. 아마도 거기서 설정이 잘못된건지..

아니면 리눅스에서 자바 스크립트 사용할려면 자바 라이브러리를 설치해줘야

하나요?? 윈도우IE는 그런거 없어도 되는거 같은데.. 답변 부탁드립니다.

:)

choissi의 이미지

여기 검색 기능에서

form and php and 전달

로 검색을 해보세요..

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

whitekid의 이미지

register_global = on
설정 하셨나요?

What do you want to eat?

정태영의 이미지

whitekid wrote:
register_global = on
설정 하셨나요?

register_global 로 인한 수많은 보안 Hole이 생길 수 있다는 점을 생각한다면..
(그래서 php.ini에서도 default로..off가 되지 않았을까 생각해봅니다..)

저 설정으로.. POST,GET상관없이 값에 접근하는 방법을 가르쳐주기 보다는..

$_GET[var]
$_POST[var]

$_SERVER[REMOTE_ADDR]
$_FILE[...]

처음부터 이렇게들 가르쳐주심 어떨까 싶군요..

다시 처음으로 돌아가서
$_POST[comment] 로 시도해보시기 바랍니다 =3=33

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

icanfly의 이미지

리퀘스트 변수가 자동전역으로 잡히는것에 대해 어떻게들 생각하시는지

궁금합니다. 전 PHP익힌지 몇달 되지 않았지만, 그렇게 자동으로 페이지

전역에 생기는 변수들을 보고 기절하는 줄 알았습니다.

다른사람이 쓴 코드를 분석할려면 시간도 엄청 걸리고, 이 변수가 뭔지

찾아보는것도 여간 짜증나는 작업이 아니더군요.

그래서 전 register_global=off로 해놓고, 명시적으로

$pt_xxx = init_request_value("xxx", _POST_);

이렇게 초기화 시켜서 사용합니다. 물론 $_POST[] 로 초기화 시켜도

되고 하여튼 명시적인 초기화를 선호합니다.

솔직히 보안 문제도 문제지만 그건 피부로 잘 느껴지진 않고, 일단 코드보기가

수많은 전역변수가 자동으로 막 생긴다는게....영 찜찜해서..

말이죠. PHP 설정파일에도 더이상 register_global=on을 권장하지 않는다고

나와있던데요. 초기화 시키는게 좋지 않나요? 좀 귀찮지만 장기적인 안목으로

봐서도..

그럼..

정태영의 이미지

icanfly wrote:
솔직히 보안 문제도 문제지만 그건 피부로 잘 느껴지진 않고, 일단 코드보기가
수많은 전역변수가 자동으로 막 생긴다는게....영 찜찜해서.
말이죠. PHP 설정파일에도 더이상 register_global=on을 권장하지 않는다고
나와있던데요. 초기화 시키는게 좋지 않나요? 좀 귀찮지만 장기적인 안목으로
봐서도..

그럼..

흠.. 기본으로 EGPCS 던가요..
Env, Get, Post, Cookie, Server 순서로 extract하는게 아마
기본값일겁니다..

로그인 했는지 여부를..
is_member 라는 쿠키값의 유무로 체크하는 아래와 같은 코드로 만들었다고 생각하면

<?PHP

  if( $is_member )...

?>

만약 저 페이지를..
http://somehost/thatpage?is_member=TRUE

이렇게 요청하면 어떻게 될까요 ;)?
만약 해당하는 쿠키가 없다면.. GET으로 받은 저 값을 사용하게 될테니 ;)

위험해질수가 있겠죠 흐흐

물론 저렇게만 짜지는 않겠지만요 ;)

뭐 저런식으로 의도하지 않은 구멍이 생길 수 있습니다..
사람들이 많이 쓰는 z뭐 보드가 관련해서 많은 구멍이 있었던걸로 알고
있습니다.. (아직도 있을지도..)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

icanfly의 이미지

기본값으로 off로 되 있죠.

그런데 문제는 저 이전에 만들어진 모든 코드가 on을 바탕으로 만들었고,

지금도 다른 사람들은 on을 바탕으로 만들고 있다는 거지요 :cry:

보안, 유지보수, 가독성 등등 모든 면에서 좋지 않다고 생각합니다.

맹고이의 이미지

그런데... 요즘 나오는 책은 어떻게 나오나요?

whitekid의 이미지

요즘은 PHP의 여러가지 문제가 계속 걸려서 ... PHP를 떠나 다른 언어로 이동중입니다.

register_global은 기본적으로 off가 되어야한다고 생각합니다. 시스템이 뭔가 자동으로 해주면, 그걸 바탕으로 개발하는 사용자는 그 "자동"의 마법에 걸려서 뭔가 이상한 일을 해버리더군요...

그런데 이 register_global은 지금 개발을 시작하는 시스템에서는 문제 없죠.. 시작할 때부터 register_global=off로 작업하면 뭐 문제가 없지만..
그러나 이게 디폴트로 되기 시작하기 전에 시작한 프로젝트라면?...
그건 문제가 달라집니다...

저희도 그런 경우를 당했는데... register_global=off로 바꾸자고 하지만 결국 아직도 못하고 있습니다. 모든 페이지를 일일이 눈으로 확인해야하는 문제가 많죠.. 또 어떤때는 GET, 어떤대는 POST.. 또는 섞어쓰는 곳도 많아서..

그래서 하위 호환성을 위해서 register_global=on으로 하고 있죠..새롭게 추가되는 페이지는 _GET, _POST, _SESSION를 이용해서 작업하도록 강요(?)하고 있습니다만... 실질적으로 지켜지기는 힘드네요.. 그놈의 습관땜시...

What do you want to eat?

fliers의 이미지

저는 perl 로 처음 CGI를 접했는데,
php를 처음 하면서 상당히 놀라웠습니다.

사용상 편한점은 이루 말로 할 수는 없겠지만
상당히 복잡해지더군요. 정태영님이 설명하신 내용도 그렇고,

그래서 $HTTP_GET_VARS 같은 변수를 쓰라고 그러더니만 이것도 문제가 있더군요 :)

제로보드 문제였는데, 예전에 DC인사이드에서 IP공개를 하자 HTTP_SERVER_VARS[REMOTE_ADDR] 에 허위 값을 넣어 잘못된 IP가 들어가도록 한 적도 있고
몇달전에 보안패치됐던 내용중에도 이와 비슷한 방법으로 admin메뉴에서의 db백업 기능을 수행하도록 하여 db유풀이 되는 버그가 있었습니다.

나중엔 $_POST 같은걸 쓰라던데 :) 잘 쓰고 있습니다.

저도 register_global 은 off 로 쓰는걸 선호하고요,
대부분 호스팅업체들 설정은 on 으로 되어 있어서 좀 그렇더군요..

그리고 다른 내용인데, magic_quotation 인가 설정도 상당히 짜증나더군요 :oops:

blacknblue의 이미지

Quote:
admin메뉴에서의 db백업 기능을 수행하도록 하여 db유풀이 되는 버그가 있었습니다.

저도 제로보드 버그 패치된것을 그냥 갖다 쓰긴 했습니다만 도저히 이해는 안되더군요..
어차피 lib.php 에서 db 접속 함수를 쓸수밖에 없는데 무단으로 제 3자가 db를 다운받을수 있다니...
이래저래 왠지 php 가 불안하다는 생각이 듭니다.
제가 이해도 안되는 곳에 버그가 있다니...

김충길의 이미지

blacknblue wrote:
Quote:
admin메뉴에서의 db백업 기능을 수행하도록 하여 db유풀이 되는 버그가 있었습니다.

저도 제로보드 버그 패치된것을 그냥 갖다 쓰긴 했습니다만 도저히 이해는 안되더군요..
어차피 lib.php 에서 db 접속 함수를 쓸수밖에 없는데 무단으로 제 3자가 db를 다운받을수 있다니...
이래저래 왠지 php 가 불안하다는 생각이 듭니다.
제가 이해도 안되는 곳에 버그가 있다니...

같은 호스팅 업체의 같은 서버를 공유하는 사용자라면 다른 사람의 DB 긁어 오는건
문제도 아닙니다. 계정 아이디만 알면 웹 서비스 디렉토리 접근 가능하고 php 소스 파일 읽을 수 있고 그러면 db 계정 정보 알 수 있으니 긁어 오는거야 일도 아니죠. 각 db 계정 패스워드를 httpd.conf 에 설정해두면 될터인데..

screen + vim + ctags 좋아요~

blacknblue의 이미지

Quote:
같은 호스팅 업체의 같은 서버를 공유하는 사용자라면 다른 사람의 DB 긁어 오는건
문제도 아닙니다. 계정 아이디만 알면 웹 서비스 디렉토리 접근 가능하고 php 소스 파일 읽을 수 있고 그러면 db 계정 정보 알 수 있으니 긁어 오는거야 일도 아니죠. 각 db 계정 패스워드를 httpd.conf 에 설정해두면 될터인데
..

cafe24 에선 mod_become 을 사용함으로써 계정의 화일들 권한만 적절히 조정하면 타 계정 사람이 비록 계정이름을 안다고 해도 웹을 이용해 접근할수 없도록 해 놓은것 같던데요..

근데 제가 집에서 노는 컴에다 mod_become 설치하고 해 보았는데 이상하게 잘 안 되더군요...

자꾸 아파치 구동 사용자명이 임의대로 바뀌어 버리는 부작용이....

정태영의 이미지

김충길 wrote:
같은 호스팅 업체의 같은 서버를 공유하는 사용자라면 다른 사람의 DB 긁어 오는건
문제도 아닙니다. 계정 아이디만 알면 웹 서비스 디렉토리 접근 가능하고 php 소스 파일 읽을 수 있고 그러면 db 계정 정보 알 수 있으니 긁어 오는거야 일도 아니죠. 각 db 계정 패스워드를 httpd.conf 에 설정해두면 될터인데..

httpd.conf 에서.. basedir을 설정할수 있습니다..
(아파치 1.x용이긴 하지만 =3=33)

<Directory "/home/aqua">
    php_admin_value open_basedir /tmp:/home/aqua
    php_flag register_globals off
</Directory>

자신의 디렉토리 안에 있는 파일만 접근하도록 할 수 있죠 ;)
파일업로드 디렉토리로 /tmp가 잡혀있어서.. open_basedir에.. /tmp도 넣어준경우입니다

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

정태영의 이미지

fliers wrote:
저도 register_global 은 off 로 쓰는걸 선호하고요,
대부분 호스팅업체들 설정은 on 으로 되어 있어서 좀 그렇더군요..

그리고 다른 내용인데, magic_quotation 인가 설정도 상당히 짜증나더군요 :oops:

AllowOveride 가 허용되어 있는 경우라면..
.htaccess 화일에서 설정이 가능합니다 .....

php_flag register_globals Off
php_flag magic_quotes_gpc off

이런식임 되죠 :twisted:

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

kyong의 이미지

제 생각에 php는 아주 유연한데 그것을 컨트롤 못하는 프로그래머나 관리자의
문제가 크다고 봅니다. 특히 보안 문제는 더욱.

register_global이 켜져 있는 상황에서 전 다음과 같이 안 쓰는 놈은 죽입니다.
(말이 험악하네요:))

if(ini_get('register_globals')) {
    $var_list = get_defined_vars();
    $safe_list = array('_REQUEST', '_SESSION', 'HTTP_SESSION_VARS');
    foreach($var_list as $name => $value) {
        if(array_search($name, $safe_list) === FALSE)
            unset($$name);
    }
}

근데 때론 굉장히 귀찮죠.
foreach ($_REQUEST as $key => $value) {
    if (is_array($value)) {
        foreach ($value as $k => $v)
            $value[$k] = strip_tags(trim($v));
        $$key = $value;
     }
    else 
        $$key = strip_tags(trim($value));
}
익명 사용자의 이미지

$comment = $_POST[comment];
print_r($comment);

요렇게 하시면 값 보이실겁니다. 쿨렁

댓글 달기

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