forked from tomyun/xeit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
xeit.html
392 lines (372 loc) · 25.5 KB
/
xeit.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
<!DOCTYPE html>
<html lang='ko'>
<head>
<meta charset='utf-8'>
<title>Xeit</title>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<link href='http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css' rel='stylesheet'>
<link href='http://netdna.bootstrapcdn.com/font-awesome/3.0.2/css/font-awesome.css' rel='stylesheet'>
<link href='xeit.css' rel='stylesheet'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script>
<script src='http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js'></script>
<script src='deps/crypto-js/build/rollups/pbkdf1.js'></script>
<script src='deps/crypto-js/build/rollups/pbkdf2.js'></script>
<script src='deps/crypto-js/build/rollups/tripledes.js'></script>
<script src='deps/crypto-js/build/rollups/rc4.js'></script>
<script src='deps/crypto-js/build/rollups/seed.js'></script>
<script src='deps/crypto-js/build/components/enc-cp949.js'></script>
<script src='deps/crypto-js/build/components/pad-nopadding-min.js'></script>
<script src='deps/asn1js/asn1.js'></script>
<script src='deps/asn1js/base64.js'></script>
<script src='deps/asn1js/oids.js'></script>
<script src='deps/srcdoc-polyfill/srcdoc-polyfill.min.js'></script>
<script src='xeit.js'></script>
<script>
function setupAuthDialog() {
$authDialog = $('#auth-dialog').modal({
backdrop: 'static',
keyboard: false
}).on('shown', function () {
$('input#auth-password').trigger('focus');
});
var sender = xeit.vendor.sender;
// 발송기관 표시.
$('#auth-sender-name').val(sender['name']);
// 지원여부에 따른 인증화면 구성.
if (sender['support']) {
$('#auth-sender-support').addClass('label-success').text('지원');
$('input#auth-password').on('keyup', function (e) {
//HACK: 엔터키로 폼 제출하는 경우 오류 메시지 초기화 방지.
if (e.keyCode != 13) {
$('#auth-password-group').removeClass('error');
$('#auth-password-help').text('');
}
});
$('#auth-info').addClass('alert-info').html('<strong>걱정마세요!</strong> 비밀번호와 메일 내용을 외부로 전송하거나 저장하지 않아요.');
$('#auth-submit').addClass('btn-primary').html('<i class="icon-eye-open icon-white"></i> 열어보기');
$('#auth-form').on('submit', function (e) {
e.preventDefault();
var password = $('input#auth-password').val();
try {
var message = xeit.load(password);
} catch (err) {
$('#auth-password-group').addClass('error');
$('#auth-password-help').text(err.message);
throw err;
}
$authDialog.on('hidden', function () {
showMail(message);
}).modal('hide');
});
} else {
$('#auth-sender-support').addClass('label-important').text('미지원');
$('input#auth-password').prop('disabled', true);
$('#auth-info').addClass('alert-error').html('<strong>모르겠어요!</strong> 보안메일이 아니거나 아직 지원하지 않는 형식인 것 같아요.');
$('#auth-submit').addClass('btn-danger').html('<i class="icon-ban-circle icon-white"></i> 돌아가기');
$('#auth-form').on('submit', function (e) {
e.preventDefault();
$authDialog.on('hidden', function () {
parent.postMessage('fallback', '*');
}).modal('hide');
});
}
// 비밀번호 설명 표시.
if (typeof sender['keylen'] !== 'undefined') {
$('input#auth-password').prop('placeholder', sender['hint'] + ' (' + sender['keylen'].toString().replace(',', '~') + '자리)')
.prop('pattern', '[0-9]{' + sender['keylen'] + '}');
} else {
$('input#auth-password').prop('placeholder', sender['hint']);
}
}
function loadMail() {
window.addEventListener('message', function (e) {
xeit.init(e.data);
setupAuthDialog();
}, false);
window.parent.postMessage('ready', '*');
}
function showMail(message) {
var $content = $('#mail-content');
var content = $content[0];
//HACK: Firefox는 아직 iframe srcdoc 미지원.
//$mailContent.attr('srcdoc', message);
srcDoc.set(content, message);
//HACK: 로딩 지연시 프레임 잘리는 현상 방지.
$content.height(window.innerHeight);
$content.load(function () {
$content.height(content.contentDocument.documentElement.scrollHeight);
});
$('#xeit-nav a[href="#mail"]').tab('show');
}
function loadHelp() {
$('#xeit-nav a[href="#mail"]').remove();
$('#xeit-nav a[href="#help"]').tab('show');
}
$(document).ready(function () {
if (window.self !== window.top) {
loadMail();
} else {
loadHelp();
}
});
</script>
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create','UA-40224792-1','github.io');ga('send','pageview');</script>
</head>
<body>
<div id='wrap'>
<div class='navbar navbar-static-top navbar-inverse'>
<div class='navbar-inner'>
<span class='brand'>Xeit</span>
<ul id='xeit-nav' class='nav'>
<li><a class='disabled' href='#mail' data-toggle='tab'>보안메일</a></li>
<li><a href='#help' data-toggle='tab'>도움말</a></li>
</ul>
</div>
</div>
<div class='tab-content'>
<div id='auth' class='tab-pane active'>
<div id='auth-dialog' class='modal hide fade'>
<div class='modal-header'>
<h3>보안메일</h3>
</div>
<div class='modal-body'>
<form id='auth-form' class='form-horizontal'>
<div class='control-group'>
<label class='control-label' for='auth-password'>보낸 곳</label>
<div class='controls'>
<input type='text' id='auth-sender-name' disabled> <span class='help-inline'><span id='auth-sender-support' class='label'></span></span>
</div>
</div>
<div id='auth-password-group' class='control-group'>
<label class='control-label' for='auth-password'>비밀번호</label>
<div class='controls'>
<input type='password' id='auth-password' required> <span id='auth-password-help' class='help-inline'></span>
</div>
</div>
</form>
<div id='auth-info' class='alert'></div>
</div>
<div class='modal-footer'>
<button type='submit' form='auth-form' id='auth-submit' class='btn'></button>
</div>
</div>
</div>
<div id='mail' class='tab-pane'>
<iframe id='mail-content' style='width: 100%; height: 100%; border: 0;'></iframe>
</div>
<div id='help' class='tab-pane'>
<div class='container-fluid'>
<div class='row-fluid'>
<section id='faq'>
<div class='page-header'>
<h2>FAQ <small>자주 하는 질문</small></h2>
</div>
<dl>
<dt>이게 뭔가요?</dt>
<dd>
<p><strong>Xeit</strong>는 금융기관들이 보내주는 거래명세서 등의 보안메일을 인터넷 익스플로러가 아닌 사파리나 크롬, 파이어폭스에서도 열어볼 수 있게 해주는 서비스입니다.</p>
</dd>
<dt>왜 필요한거죠?</dt>
<dd>
<p>국내에서 사용하는 대다수의 보안메일은 윈도의 인터넷 익스플로러에 ActiveX 플러그인을 설치해야만 볼 수 있도록 되어 있습니다. 다른 OS나 브라우저를 사용하는 사람들은 볼 수 있는 방법이 없었지요.</p>
</dd>
<dt>어떻게 보는거죠?</dt>
<dd>
<p>인터넷 익스플로러가 아닌 브라우저에서 보안메일의 첨부파일을 열어보면 빈 화면 또는 플러그인 설치 안내 화면이 나오는 것을 많이 보셨을 거에요. 이 상태에서 브라우저에 등록해놓은 <strong>Xeit</strong> 북마클릿을 누르면 비밀번호 입력 화면이 등장하면서 보안메일을 읽을 수 있게 됩니다.
</p>
</dt>
<dt>설치는 어찌하죠?</dt>
<p>일단 웹 브라우저 상단에 북마클릿을 넣을 수 있는 공간이 있는지 확인해보세요. 사파리에서는 책갈피 막대(Bookmarks Bar), 크롬에서는 북마크바(Bookmarks Bar), 파이어폭스에서는 북마크 도구모음(Bookmarks Toolbar)이라고 부르는 곳입니다. 맥이라면 <span class='label'>⌥</span> + <span class='label'>⌘</span> + <span class='label'>B</span>를 눌러서 확인해볼 수도 있습니다. 그 다음에는 아래의 버튼을 끌어 넣으면 됩니다.</p>
<div class='well'>
<p class='text-center'><a href="javascript:(function(){var%20xeit=document.getElementById('xeit');if(xeit){return;}var%20attachment=document.getElementsByTagName('html')[0].outerHTML;var%20_body=document.body;document.body=document.createElement('body');document.body.style.margin=0;document.body.style.padding=0;document.body.style.height='100%25';xeit=document.createElement('iframe');xeit.setAttribute('id','xeit');xeit.setAttribute('src','http://tomyun.github.io/xeit/xeit.html');xeit.style.width='100%25';xeit.style.height='100%25';xeit.style.border=0;document.body.appendChild(xeit);window.addEventListener('message',function(e){switch(e.data){case%20'ready':xeit.contentWindow.postMessage(attachment,'*');break;case%20'fallback':document.body=_body;break;}},false);})();"><button class='btn btn-info' type='button'><i class='icon-bookmark icon-white'></i> Xeit</button></a></p>
<p class='text-center text-info'>이 버튼을 브라우저 상단의 책갈피에 끌어 넣으세요!</p>
</div>
</dd>
<dt>어디서 쓸 수 있죠?</dt>
<dd>
<p>맥에서 사파리(6)를 기준으로 만들었으며 크롬(26)과 파이어폭스(20)에서도 돌아가는 것을 확인하였습니다. 인터넷 익스플로러에서는 확인해보지 못 했네요.</p>
</dd>
<dt>믿을 수 있나요?</dt>
<dd>
<p>설치된 북마클릿을 실행하면 기능을 불러오기 위해 인터넷 연결이 필요하기는 하지만 보안메일 해제를 위한 모든 연산은 브라우저 내에서 순수 JavaScript 기반으로 이루어집니다. 입력하신 비밀번호와 해제된 메일 내용은 브라우저 외부로 유출되지 않으니 걱정하지 않으셔도 됩니다. 참고로 모든 코드는 <a href='https://github.com/tomyun/xeit' target='_blank'>GitHub</a>에 공개되어 있습니다.</p>
</dd>
<dt>어디어디 볼 수 있죠?</dt>
<dd>
<p>대표적인 보안메일 플러그인의 형식을 대부분 지원하지만, 발송기관별로도 조금씩 다른 관계로 아직 확인되지 않은 곳들이 많습니다. 일단 아래 목록 외에는 막아놓은 상태인데요. 최대한 빨리 확인하여 추가하겠습니다.</p>
<table class='table table-condensed table-striped table-hover'>
<thead>
<tr>
<th>발송기관</th>
<th>플러그인</th>
<th>세부유형</th>
<th>알고리즘</th>
<th>지원여부</th>
<th>비고</th>
</tr>
</thead>
<tbody>
<tr>
<td>BC카드</td>
<td>INISAFE Mail</td>
<td>INITECH</td>
<td>SEED, SHA1, MD5</td>
<td><i class='icon-ok'></i></td>
<td>농협, 우리은행 등</td>
</tr>
<tr>
<td>KB국민카드</td>
<td>XecureExpress</td>
<td>PKCS#7</td>
<td>SEED, SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>KT</td>
<td>INISAFE Mail</td>
<td>INITECH</td>
<td>SEED, SHA1, MD5</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>KTF</td>
<td>JX-Mail Enterprise</td>
<td>DSMail</td>
<td>RC4, SEED, MD5</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>LG U+</td>
<td>XecureExpress</td>
<td>?</td>
<td>?</td>
<td><i class='icon-time'></i></td>
<td>확인중</td>
</tr>
<tr>
<td>NH농협카드</td>
<td>INISAFE Mail</td>
<td>PBKDF2</td>
<td>SEED, HMAC-SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>SKT</td>
<td>INISAFE Mail</td>
<td>PBKDF2 / INITECH</td>
<td>SEED, HMAC-SHA1 / MD5</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>대신증권</td>
<td>MailDec</td>
<td>-</td>
<td>SEED</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>동양생명</td>
<td>XecureExpress</td>
<td>PKCS#7</td>
<td>DES, SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>롯데멤버스카드</td>
<td>XecureExpress</td>
<td>?</td>
<td>?</td>
<td><i class='icon-time'></i></td>
<td>확인중</td>
</tr>
<tr>
<td>병무청</td>
<td>JX-Mail Enterprise</td>
<td>DSMail</td>
<td>RC4, SEED, MD5</td>
<td><i class='icon-remove'></i></td>
<td>DRM 플러그인 필요</td>
</tr>
<tr>
<td>삼성카드</td>
<td>XecureExpress</td>
<td>PWD</td>
<td>DES, SHA1</td>
<td><i class='icon-remove'></i></td>
<td>홈페이지 연결 필요</td>
</tr>
<tr>
<td>신한은행</td>
<td>INISAFE Mail</td>
<td>INITECH</td>
<td>SEED, SHA1, MD5</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>신한카드</td>
<td>XecureExpress</td>
<td>PWD</td>
<td>DES, SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>외환카드</td>
<td>XecureExpress</td>
<td>PWD</td>
<td>DES, SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>한국투자증권</td>
<td>XecureExpress</td>
<td>PKCS#7</td>
<td>DES, SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
<tr>
<td>현대카드</td>
<td>XecureExpress</td>
<td>PWD</td>
<td>SEED, SHA1</td>
<td><i class='icon-ok'></i></td>
<td></td>
</tr>
</tbody>
</table>
</p>
</dd>
<dt>Gmail에서 안 열려요.</dt>
<dd>
<p>Gmail 웹에서는 HTML 첨부파일을 열 때 ActiveX 호출 태그를 모두 제거해버리기 때문에 아무런 내용을 가져올 수 없습니다. 따라서 첨부파일을 다운로드하여 직접 열어주셔야 합니다. IMAP/POP3 등으로 별도의 메일 클라이언트를 사용하시는 경우에는 상관 없을 거예요.</p>
</dd>
<dt>좀 더 알고 싶어요.</dt>
<dd>
<p>궁금한 점이나 하고 싶은 말씀들은 <a href='https://github.com/tomyun/xeit/issues' target='_blank'>이슈</a>로 올려주시거나 <a href='http://twitter.com/tomyun' target='_blank'>@tomyun</a>으로 연락주세요.</p>
</dd>
</dl>
</section>
</div>
</div>
</div>
</div>
<div id='push'></div>
</div>
<footer id='footer'>
<div class='container'>
<p class='text-center muted credit'>
© 2013 Team BASA
</p>
</div>
</footer>
</body>
</html>