<input type =“hidden”>의 원래 목적은 무엇입니까? [닫은]


101

<input type="hidden">태그 의 원래 목적이 궁금합니다 .

요즘에는 서버로 보내지는 변수를 저장하기 위해 JavaScript와 함께 자주 사용됩니다.

그렇다면 자바 스크립트 이전<input type="hidden">존재했던 것인데 원래 목적은 무엇 이었을까요? 나는 일종의 상태를 유지하기 위해 다시 (변경되지 않은) 값을 서버에서 클라이언트로 보내는 것을 상상할 수 있습니다. 아니면 그 역사에서 뭔가 잘못되어 항상 JavaScript와 함께 사용해야 했습니까?<input type="hidden">

가능하면 답변에 참고 문헌을 제공하십시오.


3
SO에 대한 주제 해제하지만 또한 나의 선택이 될 것입니다 상태를 유지

동의 함, 제출 된 양식에 자동으로 포함되는 미리 채워진 상태 (예 : 편집 중 대리 PK)의 추적을 허용하기 위해 POST / GET
StuartLC 2013

1
JavaScript 더 많은 이유를 지원 하기 전에 존재 하는 것 (즉,이 질문이 암시하는 것처럼 어떤 이유도 손상시키지 않음)- "변수를 저장"하거나 "숨겨지지 않은"입력에서 AJAX 또는 스텁을 호출하는 JavaScript가 없었습니다. 양식 제출 전에 필드 .. 일반 텍스트 입력을 숨기는 것과 같은 다른 비뚤어진 해킹에 대한 CSS도 없었습니다.
user2246674

답변:


108

나는 일종의 상태를 유지하기 위해 다시 (변경되지 않은) 값을 서버에서 클라이언트로 보내는 것을 상상할 수 있습니다.

정확합니다. 사실, 오늘날 우리가 알고있는 HTTP는 적어도 근본적으로 상태 비 저장 프로토콜이기 때문에 오늘날에도 여전히이 목적으로 사용되고 있습니다.

이 사용 사례는 실제로 HTML 3.2 에서 처음 설명되었습니다 (HTML 2.0에 이러한 설명이 포함되어 있지 않은 것이 놀랍습니다).

type=hidden
이러한 필드는 렌더링되지 않아야하며 서버가 양식과 함께 상태 정보를 저장할 수있는 수단을 제공해서는 안됩니다. 이는 해당 속성에 의해 정의 된 이름 / 값 쌍을 사용하여 양식이 제출 될 때 서버로 다시 전달됩니다. 이것은 HTTP의 상태 비 저장에 대한 해결 방법입니다. 또 다른 접근 방식은 HTTP "쿠키"를 사용하는 것입니다.

<input type=hidden name=customerid value="c2415-345-8563">

HTML 3.2가 JavaScript의 초기 릴리스 이후 에만 W3C 권장 사항이되었다고 언급 할 가치가 있지만 숨겨진 필드가 거의 항상 동일한 목적을 제공한다고 가정하는 것이 안전합니다.


데이터를 저장하기 위해 '숨겨진'입력을 사용하는 것에 대해 내가 싫어하는 한 가지는 사용자가 데이터를 조작 할 수 있다는 것입니다. 이는 아마도 HTML을 이해하고 개발 도구를 통해 수정하는 방법을 이해하는 사람에게만 해당되는 것입니다. 해당 값을 수정하면 다른 데이터가 손상되는 경우 데이터베이스가 손상됩니다 (예 : 기본 키 참조를 저장하고 사용자가 수동으로 변경 한 경우).
Brett84c

3
@ Brett84c : 그렇기 때문에 항상 입력을 확인하고 클라이언트를 신뢰하지 않아야합니다.)
BoltClock

정확히, 나는 새로운 개발자가 관련된 가능한 위험을 인식 할 수 있도록 그것을 던지고있었습니다.
Brett84c

2
이러한 위험에 대한 어떤 것도 '숨겨진'입력에만 국한되지 않습니다 . 클라이언트로 전송 된 모든 것은 다시 돌아 오기 전에 조작 할 수 있습니다. 쿠키 또는 JS 기반 대안은 동일합니다.
FLHerne

10

여기서는 간단한 서버 측 실제 사례를 제공 할 것입니다. 예를 들어 레코드가 반복되고 각 레코드에 삭제 버튼이있는 양식이 있고 특정 레코드를 삭제해야하므로 여기에 hidden필드가 표시됩니다. 이 경우 삭제할 레코드의 참조를 가져 오면id

예를 들면

<?php
    if(isset($_POST['delete_action'])) {
        mysqli_query($connection, "DELETE FROM table_name 
                                   WHERE record_id = ".$_POST['row_to_be_deleted']);
                                   //Here is where hidden field value is used
    }

    while(condition) {
?>
    <span><?php echo 'Looped Record Name'; ?>
    <form method="post">
        <input type="hidden" name="row_to_be_deleted" value="<?php echo $record_id; ?>" />
        <input type="submit" name="delete_action" />
    </form>
<?php
    }
?>

1
실제 코드를 제외하고 좋은 예는 SQL 입력을 안전하게 처리하기 위해 준비된 명령문 또는 다른 방법을 사용해야합니다.
Matthew Flaschen 2014-04-22

8

요컨대, 원래 목적은 양식의 제출과 함께 제출 될 필드를 만드는 것이 었습니다. 때로는 숨겨진 필드 (예 : 사용자 ID)에 일부 정보를 저장하고 양식 제출과 함께 제출해야하는 경우가있었습니다.

HTML 1995 년 9 월 22 일 사양에서

'TYPE = HIDDEN'인 INPUT 요소는 숨겨진 필드를 나타냅니다. 사용자는이 필드와 상호 작용하지 않습니다. 대신 VALUE 속성은 필드의 값을 지정합니다. NAME 및 VALUE 속성은 필수입니다.


1
해당 답변에 대해 자세히 설명하거나 양식 제출 후 숨겨진 필드를 제출하는이 동작에 대한 참조를 제공 할 수 있습니까?
GitaarLAB 2013

@GitaarLAB, 예제 (사용자 ID)를주었습니다 ... 어쨌든 웹에는 많은 예제가 있습니다. 예 : echoecho.com/htmlforms07.htm
Chuck Norris

1
미안 original purpose was to make a field which will be submitted *after* form's submit합니다. 라인 이 모호합니다. '양식이 데이터를 게시 후 숨겨진 필드가 (신비한 장소로) 제출 됩니다.'로 해석 될 수 있습니다 . 따라서 위의 내 의견.
GitaarLAB 2013

1
나는 그것을 얻습니다 :) 귀하의 의견에 감사드립니다, 나는 내 대답을 편집했습니다. 철자가 틀렸을뿐입니다 (아직 영어로 전문가 수준에 도달하지 못했습니다 : D).
Chuck Norris

6

type = 'hidden'을 포함한 양식 요소의 값은 양식이 게시 될 때 서버에 제출됩니다. 입력 유형 = "숨겨진"값은 페이지에 표시되지 않습니다. 예를 들어 숨겨진 필드에 사용자 ID를 유지하는 것은 많은 용도 중 하나입니다.

SO는 찬성 클릭에 숨겨진 필드를 사용합니다.

<input value="16293741" name="postId" type="hidden">

이 값을 사용하여 서버 측 스크립트는 찬성 투표를 저장할 수 있습니다.


하하, 잘 잡아! 그리고 값 끝에 "x"를 추가하면 upvoting 할 때 오류가 발생합니다. D
Uooo

@Uooo 그리고 당신은 그것을 숨기거나 값을 직접 변경할 수 있습니다. 값을 다른 답변으로 변경할 수 있습니다. 그런 다음 찬성 버튼을 클릭하면 다른 답변에 대한 찬성표로 기록됩니다. ;)
Geoffrey Hale

5

기본적으로 숨겨진 필드는 다단계 양식과 함께 사용하는 것이 더 유용하고 이점이 있습니다. 숨겨진 필드를 사용하여 hidden을 사용하여 한 단계 정보를 다음 단계로 전달하고 끝 단계까지 전달되도록 유지할 수 있습니다.

  1. CSRF 토큰.

교차 사이트 요청 위조 는 매우 일반적인 웹 사이트 취약점입니다. 모든 양식 제출에서 비밀 사용자 별 토큰을 요구하면 공격 사이트가 적절한 토큰이 무엇인지 추측 할 수없고 사용자를 대신하여 수행하는 양식 제출은 항상 실패하므로 CSRF 공격을 방지합니다.

  1. 다중 페이지 양식에 상태를 저장합니다.

사용자가 현재있는 다중 페이지 양식에 어떤 단계를 저장해야하는 경우 숨겨진 입력 필드를 사용하십시오. 사용자는이 정보를 볼 필요가 없으므로 숨겨진 입력 필드에서 숨 깁니다.

일반 규칙 : 필드를 사용하여 사용자가 볼 필요가 없지만 양식 제출시 서버로 보내려는 모든 것을 저장합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.