[HTML] form tag, input 태그 속성
input 태그
- checkbox와 listbox는 ``html <input ... name="key[]">``로 지정하면 서버에서 배열로 받을 수 있다.
- HTML5에서 input에 type이 많이 추가되었으니 참고할 것.(tel, email, url, date, ...) 이를 사용하면 좀 더 semantic하게 나타낼 수 있다.
- HTML5에서 input에 placeholder 등의 attribute가 추가되었으니 참고.
input 태그에 있는 값을 가져와서 ajax 요청에 사용할 때, tag validation 적용하기 - 그냥 라이브러리 쓰자.
form tag
method를 설정하지 않으면 기본값 GET으로 설정된다.
```html
<form method="POST" id="my-form" action="index.php">
<label for="name">이름</label></br>
<input type="text" name="name" id = "name" /></br>
<label for="pass">비밀번호</label></br>
<input type="password" name="pass" id="pass" /></br>
<input type="hidden" name="hide" value="01" />
<input type="submit" value="제출"/>
</form>
```
submit 버튼을 누르면 자동으로 입력 양식을 제출하고 페이지를 새로고침한다.
GET은 query string으로, POST는 form data로 보내게 되는데
데이터를 보내는 형식은 `` name="name_value*" value="value_value*"`` 이면
`` name_value1=value_value1&name_value2=value_value2...`` 로 GET이나 POST나 동일하다.
태그에 ``name`` attribute가 설정되어 있다면 ``key=value`` 쌍이 생성되어 전송된다.
그래서 전송하고 싶은 데이터가 있다면 ``name``과 ``value`` attribute를 추가하면 된다.
``name``이 설정되지 않으면 어떤 태그든지 ``key=value`` 쌍이 생성되지 않으니 전송되지 않는다.
security
1. ``html <input type="password">``에 입력하는 데이터도 query string이나 form data에 plain text로 노출된다. hidden도 마찬가지.
2. url에 바로 노출되는 GET보다야 POST가 낫겠지만 form data도 마음만 먹으면 확인할 수 있기 때문에 근본적으로는 차이가 없다.
3. POST도 클라이언트 단에서 ``html <form method=post>``로 폼 추가하고 전송하면 그냥 전송할 수 있다.
그래서 인증을 담당하는 페이지는 https로 구성해야 한다.
확인해보니 n사 인증 페이지는 https, POST로 전송하고, 클라이언트에서 JS로 encryption해서 전송하기 때문에 아이디와 패스워드가 그대로 body에 노출되지 않는다. 패스워드는 encpw로 encryption되어 전송되는 것 같은데 아이디도 같이 encryption되는 것으로 추정. (해시를 클라이언트서 하는지 서버에서 하는지는 자세히 안봤다. 아마 클라이언트에서 하겠지.)
ID/PW를 같은 값으로 입력해도 매번 encpw값이 다르다. encnm을 같이 전송하는 것으로 보아 이를 salt로 사용하는 듯.
이런 식으로 JS를 이용해 전송되는 데이터 자체도 암호화하는 것이 좋다.
'JS Stack > Front-end' 카테고리의 다른 글
Same-origin Policy, CORS (0) | 2020.06.14 |
---|---|
HTML5 data-* attribute (0) | 2018.11.23 |
[Front-end] Ajax (0) | 2017.05.28 |
CSS Selector (0) | 2017.05.24 |
CSS 팁과 기본 지식 (0) | 2017.05.03 |