あなたがカード支払いを処理するためのアプリを書く必要があった場合、PayPalを統合するのではなく、PayPalであるように。
Payment Card Industry Data Security Standard(PCI DSS)は、主要なカードシステムからブランドクレジットカードを扱う組織のための情報セキュリティ標準です。
PCI DSS(Payment Card Industry Data Security Standard)主要なカードシステムからブランドクレジットカードを扱う組織のための情報セキュリティ標準です。Wikipedia について
言い換えれば、これは巨大なチェックリストで、「ヘイ、もしあなたが人の金を保存したり処理するつもりなら、おそらくあなたのデータベースを世界に開かないでください」と言います。
Why Am I Even Writing This?
なんでこれさえ書いてるの?PCI DSS コンプライアンスのアプリで作業した後、私はある程度の実存的危機に直面し、「なぜすべてのアプリが PCI DSS セキュアなコーディングの慣行に従うべきではないのか」と自分に尋ねた。
私を信じてください、PCI DSSはそれが聞こえるほど恐ろしいわけではありません。コンプライアンスとプライバシーの人々は、すべての単純なプロセスが自分自身について良いと感じるために巨大な音を作る方法を持っています。ストレスのある日を過ごしたいですか? PIA、DPIA、DSAR、またはROPAについて話すのを聞く。
過剰に単純化するのではなく、コンプライアンスは痛みを伴う可能性がありますが、データを保護し、「Have I Been Pwned」に終止符を打つのを防ぐことができます。
セキュリティコードを確保するためのヒント
あなたが支払いシステムを構築している場合や、夜間の睡眠を改善しようとしている場合、ここでは、あなたをPCI DSSコンプライアンスに近づけるコードをセキュアにするいくつかの簡単な方法があります。
Subnets, NAT Gateways, and the Drama of Networking
あなたのアプリのデータベースが公共のサブネットにある場合は、読むのをやめてそれを修正する必要があります。
敏感なものにプライベートサブネットを使用することを確認し、NATゲートウェイを通じてトラフィックをルーティングし、インターネットにアクセスできるように(パッチ、アップデート、メメムなど)直接曝露されないようにしてください。
「マトリックス」の愛好家にとって、マトリックスの世界はプライベートなサブネットであり、現実の世界は公共のサブネットであり、ネオと彼の友人が世界間を旅するために使用するセキュアな電話はNATゲートウェイです。
僕も好きだし、君も好きだし、ちょっと時間がかかりました。
Encrypt All the Things
以前聞いたことありますか?また聞きますか?
- 休憩中に暗号化。
- 輸送中の暗号化
- ジャーナル、バックアップ、そして環境変数を暗号化する場合、あなたが辛いと感じている。
クラウドサービスでは、暗号化を管理することは簡単です. あなたはそれらを有効にする必要があります。
そして、Base64は暗号化ではありません。それは自分自身に嘘をつく人々のためにあります。あなたはあなたが誰であるかを知っています。確かに、それはその用途を持っていますが、セキュリティはそれらの1つではありません。
Security Headers
セキュリティヘッダーは、Webサイトのセキュリティ関連の側面をどのように処理するかについてブラウザに指示するHTTP応答ヘッダーです. They help you prevent attacks such as Cross-Site Scripting (XSS), clickjacking, and man-in-the-middle attacks. Set It and Forget It.
少なくとも、追加:
- 厳格な交通安全
- X コンテンツ タイプ オプション
- コンテンツセキュリティポリシー
- Xフレームオプション
ほとんどのフレームワークやクラウドサービスで簡単に設定できます. Do it once, and you’re already better off than most. あなたはすでにほとんどのフレームワークとクラウドサービスで簡単に設定できます。
Firewalls? Definitely Firewalls
ファイアウォールを通じてアプリケーションへの公開リクエストをルーティングします.It's like putting a bouncer in front of your app.
ブームの時代とは異なり、ファイアウォールを構成することは、アスガードからの指示で家具を組み合わせるのと同じです. あなたはそれを動作させることができますが、どのくらいのコストで? 今日のアプリケーションは、このプロセスをより容易にします。
AWS WAF および Azure Firewall などのクラウド サービスには、既に一般的な脅威のための事前設定されたルールが含まれています。
最小限の努力でファイアウォールは、既知の攻撃パターンを止め、悪いIPをフィルタリングし、2008年からまだSQL注入を試みている1人の男をブロックするのに役立ちます。
Access Control
あなたのアプリは公共の図書館ではありません。すべてのサービスにすべてのものに完全なアクセスを提供しないでください. あなたはオプラ・ウィンフリーではありません: “You get admin! You get admin! Everyone gets admin!”
「最小特権の原則」に従って、すべてのユーザーが絶対に必要とするものを手に入れることを意味します。
クリデンティアとキーを定期的に回転し、可能な限り静的キーの代わりに役割を使用してください。
Staging Is Not Production
あなたのステージ環境は、秘密ではなく構造で生産を反映すべきです。
- ステージデータも暗号化し、攻撃者はどこからデータを取得するのか気にしない。
- 制作の秘密をステージにコピーしないでください。
- ここでも監視とWAFルールを実施します。
ハッカーは、アラームが少ないステージ化環境を好みます スクリプトをテストするのに良い場所はどこですか?
Change Management
PCI DSS では、コード、インフラストラクチャ、セキュリティポリシーの変更を追跡するための手順が必要です。
簡単に言えば、Gitを使用して、Infrastructure-as-code (Serverless Framework、Terraform、AWS CDKなど) を使用して、警告を設定します。
Logging Saves Lives
ログは重要です. あなたは決してそれらを必要としないことを望むが、そうすれば、あなたは本当にそれらを必要とします. 重要なすべてのためのセキュアで中央のログを保持する:
- アプリケーションログ:アプリケーションからのエラーやその他の重要な情報をログして、デバッグを手助けします。
- アクセスログ:誰が何をやったか、いつやったかをログします。
- データベースログ:遅いクエリ、奇妙なアクセスパターン、および潜在的な侵害をキャッチします。
- 監査ログ: 許可、ファイアウォールのルール、コードの展開の変更をログします. AWS CloudTrail、GuardDuty、Config などのツールは、これをサポートします。
Prefer ORMs
これはあなたの最初の防衛ライン(および衛生)です。あなたが死の願望を持つデータベースウィザードでない限り、原始SQLを忘れてください. ORMを使用してください. Yes, you could parameterize your raw SQL and improve security; however, there is still a large chance that future you or your colleague will forget to parameterize a query properly, and just like that, you're cooked.
ORMsはデータベースの相互作用を抽象化し、コードを維持しやすくし、インジェクション攻撃の可能性を低下させます。DROP TABLE users;
夜遅くにコミットする。
In Conclusion
結論としてそれは長いリストですが、私はあなたがすでにやっていることでいっぱいであることを確信しています。
コンプライアンスは不快であるが、データ侵害も同様である PCI DSS は「いいえ、できない」という巨大なリストのように感じるかもしれないが、あなたとお客様の安全を守ろうとしているだけだ。AWS、Azure、GCP などのクラウドプラットフォームでは、これらのベストプラクティスに従わないための言い訳はありません。
安全に保つ. 従順に保つ. そして、すべての良いことの愛のために、暗号化されていないカード番号をデータベースコラムに保存しないでください。card_number
.