HTTP ì¸ì¦
HTTPë ì ê·¼ ì ì´ì ì¸ì¦ì ìí ì¼ë°ì ì¸ íë ììí¬ë¥¼ ì ê³µí©ëë¤. ì´ íì´ì§ììë ì¼ë°ì ì¸ HTTP ì¸ì¦ íë ììí¬ë¥¼ ìê°íê³ ìë²ì HTTPì Basic ì¤í¤ë§ ì¸ì¦ ë°©ìì¼ë¡ ì ê·¼ì ì ííë ê²ì ë³´ì¬ì¤ëë¤.
ì¼ë°ì ì¸ HTTP ì¸ì¦ íë ììí¬
RFC 7235ë ìë²ì ìí´ í´ë¼ì´ì¸í¸ ìì²ì ìëíê³ , í´ë¼ì´ì¸í¸ì ìí´ ì¸ì¦ ì 보를 ì ê³µí기 ìí´ ì¬ì©ë ì ìë HTTP ì¸ì¦ íë ììí¬ë¥¼ ì ìí©ëë¤.
ì´ë¬í ìëì ìëµ ê³¼ì ì ë¤ìê³¼ ê°ì´ ìëí©ëë¤.
- ìë²ë í´ë¼ì´ì¸í¸ìê²
401(Unauthorized) ìëµ ì½ë를 ê°ì§ê³ ìëµíë©°, ìµìí í ë²ì ìëì í¬í¨ëWWW-Authenticateìëµ í¤ëë¡ ê¶íì ë¶ì¬íë ë°©ë²ì ëí ì 보를 ì ê³µí©ëë¤. - ìë²ì ì¸ì¦ì í기를 ìíë í´ë¼ì´ì¸í¸ë
Authorizationìì² í¤ë íëì ì¸ì¦ ì 보를 í¬í¨í¨ì¼ë¡ì¨ ì¸ì¦ì ìíí ì ììµëë¤. - í´ë¼ì´ì¸í¸ë ëê° ì¬ì©ììê² ë¹ë°ë²í¸ í롬íí¸ë¥¼ íìí ê²ì´ê³ ì íí
Authorizationí¤ë를 í¬í¨íë ìì²ì ë§ë¤ ê²ì ëë¤.

ìì ì¼ë°ì ì¸ ë©ìì§ íë¦ì ëë¶ë¶(ì ë¶ë ìëì§ë§) ì¸ì¦ ì²´ê³ì ëí´ ëì¼í©ëë¤. í¤ëì ì¤ì ì ë³´ì ì¸ì½ë© ë°©ìì ë³ê²½ë©ëë¤!
ê²½ê³ : ì ë¤ì´ì´ê·¸ë¨ì ì¬ì©ë "Basic" ì¸ì¦ ì²´ê³ë ìí¸íëìì§ë§, ìí¸íëì§ ìì ì격 ì¦ëª ì ë³´ë ëë¤. êµíì´ ë³´ì ì°ê²°(HTTPS/TLS)ì íµí´ ì´ë£¨ì´ì§ì§ ìë í, ì´ë ìì í ìì íì§ ììµëë¤.
íë¡ì ì¸ì¦
ëì¼í ìë ë° ìëµ ë©ì»¤ëì¦ì´ 'íë¡ì ì¸ì¦'ì ìí´ìë ì¬ì©ë ì ììµëë¤. 리ìì¤ ì¸ì¦ ë° íë¡ì ì¸ì¦ì í¨ê» ì¡´ì¬í ì ì기 ë문ì, í¤ëì ìí ì½ëì ë¤ë¥¸ ì¸í¸ê° íìí©ëë¤. íë¡ìì ê²½ì°, ìì²ì ëí ìí ì½ëë 407 (Proxy Authentication Required)ì´ê³ , Proxy-Authenticate ìëµ í¤ëë íë¡ìì ì ì© ê°ë¥í ìµìí íëì ìì²ì í¬í¨íë©°, ê·¸ë¦¬ê³ Proxy-Authorization ìì² í¤ëë íë¡ì ìë²ì ì¸ì¦ ì 보를 ì ê³µí기 ìí´ ì¬ì©ë©ëë¤.
ì ê·¼ ê±°ë¶
(íë¡ì) ìë²ê° ì í¨íì§ ìì ì¸ì¦ ì 보를 ë°ëë¤ë©´, ìë²ë 401 Unauthorized ëë 407 Proxy Authentication Requiredë¡ ìëµíì¬ì¼ íê³ , ì¬ì©ìë ìë¡ì´ ìì²ì ë³´ë´ê±°ë Authorization í¤ë íë를 ë°ê¿ ì ììµëë¤.
(íë¡ì) ìë²ê° 주ì´ì§ 리ìì¤ì ëí ì ê·¼ ê¶íì ì»ê¸° ìí´ 'ì ì íì§ ìì' ì í¨í ì¸ì¦ ì 보를 ë°ëë¤ë©´, ìë²ë 403 Forbidden ìí ì½ëë¡ ìëµíì¬ì¼ í©ëë¤. 401 Unauthorizedë 407 Proxy Authentication Requiredìë ë¤ë¥´ê², í´ë¹ ì¬ì©ìì ëí ì¸ì¦ì ë¶ê°ë¥íê³ , ë¸ë¼ì°ì ë ìë¡ì´ ìë를 ì ìíì§ ììµëë¤.
모ë ê²½ì°ì, ìë²ë ì ì í ê¶íì´ ìê±°ë ì¸ì¦ëì§ ìì ì¬ì©ììê² íì´ì§ì ì¡´ì¬ë¥¼ ì¨ê¸°ê¸° ìí´ 404 Not Found ìí ì½ë를 ë°ííë ê²ì ì í¸í ì ììµëë¤.
êµì°¨ ì본 ì´ë¯¸ì§ ì¸ì¦
ì ì¬ì ì¸ ë³´ì 문ì (ì´í ë¸ë¼ì°ì ìì ìì ë©ëë¤)ë í¬ë¡ì¤ ì¬ì´í¸ ì´ë¯¸ì§ ì¸ì¦ì´ììµëë¤. Firefox 59ë¶í° ë¤ë¥¸ ì¶ì²ìì íì¬ ë¬¸ìë¡ ë¡ëë ì´ë¯¸ì§ 리ìì¤ë ë ì´ì HTTP ì¸ì¦ ëíìì를 ì°ê²°í ì ììµëë¤(Firefox bug 1423146). 공격ìê° ììì ì´ë¯¸ì§ë¥¼ ì 3ì íì´ì§ì ì½ì í ì ìë ê²½ì° ì¬ì©ìê° ì격 ì¦ëª ì´ ëëë¹íë ê²ì ë°©ì§í©ëë¤.
HTTP ì¸ì¦ì 문ì ì¸ì½ë©
ë¸ë¼ì°ì ë ì¬ì©ì ì´ë¦ê³¼ ë¹ë°ë²í¸ì utf-8 ì¸ì½ë©ì ì¬ì©í©ëë¤.
Firefoxë íë ISO-8859-1ì ì¬ì©íì§ë§ ë¤ë¥¸ ë¸ë¼ì°ì ìì í¨ë¦¬í°ë¥¼ ìí´ ê·¸ë¦¬ê³ Firefox bug 1419658ì ì¤ëª
ë ì ì¬ì ì¸ ë¬¸ì 를 í¼í기 ìí´ utf-8ë¡ ë³ê²½íìµëë¤.
WWW-Authenticateì Proxy-Authenticate í¤ë
WWW-Authenticateì Proxy-Authenticate ìëµ í¤ëë ììì ëí ì ê·¼ì ì»ê¸° ìí´ ì¬ì©ëì´ì¼ í ì¸ì¦ ë°©ë²ì ì ìí©ëë¤. ì´ë¤ì ì¸ì¦ì íë ¤ë í´ë¼ì´ì¸í¸ê° ì¸ì¦ ì 보를 ì ê³µí ë°©ë²ì ì기 ìí´, ì´ë¤ ì¸ì¦ ì¤í¤ë§ê° ì¬ì©ë ê²ì¸ì§ë¥¼ 구체ì ì¼ë¡ ì í íìê° ììµëë¤.
ì´ë¬í í¤ëì 문ë²ì ë¤ìê³¼ ê°ìµëë¤.
WWW-Authenticate: <type> realm=<realm>
Proxy-Authenticate: <type> realm=<realm>
ì¬ê¸°ì, <type>ì ì¸ì¦ ì¤í¤ë§ì
ëë¤("Basic"ì ê°ì¥ ì¼ë°ì ì¸ ì¤í¤ë§ì´ë©° ìëì ìê°ë ë¶ë¶). 'realm'ì ë³´í¸ëë ììì ì¤ëª
íê±°ë ë³´í¸ì ë²ì를 ì리ëë° ì¬ì©ë©ëë¤. ì´ë ì´ë¤ ê³µê°ì ì¬ì©ìê° ì ê·¼íë ¤ê³ ìëíëì§ë¥¼ ì리기 ìíì¬, "ì¤ê° ë¨ê³ì ì¬ì´í¸ì ëí ì ê·¼"ê³¼ ê°ê±°ë ëë ë¹ì·í ë©ìì§ê° ë ì ììµëë¤.
Authorizationì Proxy-Authorization í¤ë
Authorizationì Proxy-Authorization ìì² í¤ëë ì¬ì©ì ìì´ì í¸ê° (íë¡ì) ìë²ì ì¸ì¦ì í기 ìí ì¸ì¦ ì 보를 í¬í¨í©ëë¤. ì¬ê¸°ìì, <type>ì ë¤ì í ë² íìíë©° ì격 ì¦ëª
ì´ ë¤ì ë°ë¼ìµëë¤. ì´ë¤ ì¸ì¦ ì¤í¤ë§ê° ì¬ì©ëëì§ì ë°ë¼ ì¸ì½ë©ì´ ëì´ ìê±°ë ìí¸íê° ë ì ìë ì격 ì¦ëª
ì´ íìí©ëë¤.
Authorization: <type> <credentials>
Proxy-Authorization: <type> <credentials>
ì¸ì¦ ì¤í¤ë§
ì¼ë°ì ì¸ HTTP ì¸ì¦ íë ììí¬ë ì¬ë¬ ì¸ì¦ ì¤í¤ë§ì ìí´ ì¬ì©ë©ëë¤.
IANAë ì¸ì¦ ì²´ê³ ëª©ë¡ì ì ì§ ê´ë¦¬íì§ë§ Amazon AWSì ê°ì í¸ì¤í¸ ìë¹ì¤ìì ì ê³µíë ë¤ë¥¸ ì²´ê³ë ììµëë¤.
ëª ê°ì§ ì¼ë°ì ì¸ ì¸ì¦ ì²´ê³ë ë¤ìê³¼ ê°ìµëë¤.
- Basic
-
base64ë¡ ì¸ì½ë©ë ì격ì¦ëª ì¸ RFC 7617ì ìì¸í ë´ì©ì ìë를 참조íì¸ì.
- Bearer
-
OAuth 2.0ì¼ë¡ ë³´í¸ëë 리ìì¤ì ì ê·¼í기 ìí ì ë¬ì í í°ì¸ RFC 6750를 참조íì¸ì.
- Digest
-
RFC 7616를 참조íì¸ì. Firefox 93 ì´ìììë SHA-256 ìê³ ë¦¬ì¦ì ì§ìí©ëë¤. ì´ì ë²ì ì MD5 í´ì±ë§ ì§ìí©ëë¤(ê¶ì¥ëì§ ìì).
- HOBA
-
RFC 7486, Section 3, HTTP Origin-Bound Authentication, ëì§í¸ ìëª ê¸°ë° ì¸ì¦ì 참조íì¸ì
- Mutual
-
RFC 8120 참조íì¸ì.
- Negotiate / NTLM
-
RFC4599 참조íì¸ì.
- VAPID
-
RFC 8292 참조íì¸ì.
- SCRAM
-
RFC 7804 참조íì¸ì.
- AWS4-HMAC-SHA256
-
AWS 문ì를 참조íì¸ì. ì´ ì²´ê³ë AWS3 ìë² ì¸ì¦ì ì¬ì©ë©ëë¤.
ì¤í¤ë§ë ë³´ì ê°ëì í´ë¼ì´ì¸í¸ ëë ìë² ìíí¸ì¨ì´ìì ì¬ì© ê°ë¥ì±ì ë°ë¼ ë¬ë¼ì§ ì ììµëë¤.
"Basic" ì¸ì¦ ì¤í¤ë§ë ë³´ìì´ ë§¤ì° ì¢ì§ ìì§ë§ ê´ë²ìíê² ì§ìëë©° ì¤ì ì´ ì½ê³ , ìëì ë ìì¸í ìê°ëì´ ììµëë¤.
Basic ì¸ì¦ ì¤í´
"Basic" HTTP ì¸ì¦ ì¤í´ì RFC 7617ì ì ìëì´ ìëë°, ì´ë base64를 ì´ì©íì¬ ì¸ì½ë©ë ì¬ì©ì ID/ë¹ë°ë²í¸ ìì ì¸ì¦ ì 보를 ì ë¬í©ëë¤.
Basic ì¸ì¦ì ë³´ì
ì¬ì©ì IDì ë¹ë°ë²í¸ê° í문ì¼ë¡ ë¤í¸ìí¬ë¥¼ íµí´ ì ë¬ë기 ë문ì (ì´ê²ì base64ë¡ ì¸ì½ë© ëì´ ìì¼ë, base64ë ë³µí¸íê° ê°ë¥í ì¸ì½ë©ì´ë¯ë¡), Basic ì¸ì¦ ì¤í¤ë§ë ìì íì§ ììµëë¤. HTTPS / TLSë basic ì¸ì¦ê³¼ í¨ê» ì¬ì©ëì´ì¼ í©ëë¤. ì´ë¬í ì¶ê°ì ì¸ ë³´ì í¥ì ìì´ë, basic ì¸ì¦ì 민ê°íê±°ë ê·ì¤í ì 보를 ë³´í¸íë ë° ì¬ì©ëì´ìë ì ë©ëë¤.
Apacheì Basic ì¸ì¦ì¼ë¡ ì ê·¼ ì íí기
Apache ìë²ìì ëë í°ë¦¬ë¥¼ ë¹ë°ë²í¸ë¡ ë³´í¸í기 ìí´ìë, .htaccessì .htpasswd íì¼ì´ íìí ê²ì
ëë¤.
.htaccess íì¼ì ì¼ë°ì ì¼ë¡ ì´ë ê² ìê²¼ìµëë¤.
AuthType Basic
AuthName "Access to the staging site"
AuthUserFile /path/to/.htpasswd
Require valid-user
.htaccess ê°ê°ì ì¤ì´ ì½ë¡ (:)ì¼ë¡ ëëì´ì ¸ ìë ì¬ì©ì ì´ë¦ê³¼ ë¹ë°ë²í¸ë¥¼ í¬í¨íë .htpasswd íì¼ì 참조í©ëë¤. ì¬ë¬ë¶ì ê·¸ë¤ì´ í´ì¬ ìí¸íëì´ ì기 ë문ì (ì´ ê²½ì°ììë md5) ì¤ì ë¹ë°ë²í¸ë¥¼ ë³´ì§ ëª»í ìë ììµëë¤. ì¬ë¬ë¶ì´ ìíë¤ë©´ .htpasswd íì¼ì ì´ë¦ì ë°ê¿ ì ìì§ë§, ì´ íì¼ì ë구ìê²ë ì ê·¼ ê°ë¥í´ìë ì ë¨ì ì ìíì¸ì(Apacheë ì¼ë°ì ì¼ë¡ .ht* íì¼ì ëí ì ê·¼ì ì ííëë¡ ì¤ì ëì´ ììµëë¤).
aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz.
user2:$apr1$O04r.y2H$/vEkesPhVInBByJUkXitA/
Nginxì Basic ì¸ì¦ì¼ë¡ ì ê·¼ ì íí기
Nginxìì, ì¬ë¬ë¶ì ë³´í¸íë ¤ë ìì¹ì ë¹ë°ë²í¸ë¡ ë³´í¸ë ììì ì´ë¦ì ëíë´ë auth_basic ëª
ë ¹ì´ë¥¼ ì ì´ì¤ íìê° ììµëë¤. ìì Apache ìì ì ìë ê²ê³¼ ê°ì´, auth_basic_user_file ëª
ë ¹ì´ë ìí¸íë ì¬ì©ì ì¸ì¦ ì 보를 ê°ì§ê³ ìë .htpasswd íì¼ì ê°ë¦¬íµëë¤.
location /status {
auth_basic "Access to the staging site";
auth_basic_user_file /etc/apache2/.htpasswd;
}
URLì ì¸ì¦ ì 보를 ì¬ì©íì¬ ì ê·¼í기
ëí ë§ì í´ë¼ì´ì¸í¸ë¤ì ìëì ê°ì´ ì¬ì©ì ì´ë¦ê³¼ ë¹ë°ë²í¸ë¥¼ í¬í¨íë ì¸ì½ë©ë URLì ì¬ì©íì¬ ë¡ê·¸ì¸ í롬íí¸ë¥¼ í¼í ì ììµëë¤.
https://username:password@www.example.com/
ì´ë¬í ë°©ìì URLì ë ì´ì ì¬ì©ëì§ ììµëë¤. Chromeìì, URLì username:password@ ë¶ë¶ì ë³´ì ìì ì´ì ë¡ ì ê±°ë©ëë¤. Firefoxììë, í´ë¹ ì¬ì´í¸ê° ì¤ì ë¡ ì¸ì¦ì´ íìíì§ë¥¼ ì²´í¬íë©°, ê·¸ë ì§ ìì¼ë©´ Firefoxë í롬íí¸ë¡ "ì¬ì©ì ì´ë¦ usernameì ì¬ì©íì¬ www.example.com ì¬ì´í¸ì ë¡ê·¸ì¸íë ¤ê³ íì§ë§, ì¹ì¬ì´í¸ë ì¸ì¦ì´ íìíì§ ììµëë¤. ì´ë ì¬ì©ì를 ìì´ë ¤ë ìëì¼ ì ììµëë¤."ì ê°ì ë©ìì§ë¡ ì¬ì©ììê² ê²½ê³ í©ëë¤.