前書き:
昨年の9月、私の同僚が共同購入サイトで鍋定食を購入し、それからほぼ毎日買っていました。元旦に、共同購入サイトは「VIP 会員は赤い封筒を 0 元で受け取る」活動を開始しました。赤い封筒を受け取るのが嫌いな人はいないでしょうか。それで私もそれに参加しました。
それで、私は思い切って登録し、クリックして購入し、ショッピング カートに入り、クリックして注文を確認しました。アラートに「このイベントは VIP メンバーのみに限定されています」と表示されるのはなぜですか?私の最初の反応は、ページのソース コードを見ることでした (イベントが終了して購入ページに入ることができないため、ここでは疑似コードを使用して表現する必要があります):
//确认订单按钮的点击事件function btn_click(){ ajax获取当前用户的类型 如果不是VIP,alert("本活动仅限VIP会员参与"); 否则 form1.submit(); }
それから私はアドレスバーに入力:javascript:form1.submit(); Enter!支払いページに入り、「OK」をクリックします。購入成功しました! 5元の赤い封筒をもらいました! ############### 非常にすばらしい! ! !新しいアカウントを登録して上記の手順を繰り返したところ、無事に5元の紅封筒を受け取りました。
私はすぐにカスタマー サービスにこのバグについて説明するメッセージを残しましたが、今日まで返信がありませんでした (笑)。
この脆弱性の重要な点は、開発者が form1.submit() のバックグラウンド コードで現在のユーザーが VIP メンバーであるかどうかを判断するのを忘れ、JavaScript の検証のみに依存していることです。 フロントエンド検証は役に立ちません。完全にバイパスできます。バックエンド検証が最も重要です。 ! 朝得た知識をもとに、1日の夜も他の共同購入ウェブサイトの抜け穴を探し続けたところ、案の定、より深刻な抜け穴を発見しました。 共同購入サイトでは、金の卵をぶつける元旦抽選会も開催していました。参加は無料です。購入後、チャンスを得るには友人を招待してイベントに参加する必要があることがわかりました。金の卵を粉砕します。写真に示すように、友達を招待するともう一度チャンスが与えられます :金の卵をクリックするとすぐに、「そこにあります」というアラートが表示されました。宝くじの機会はもうありません。お友達を招待しに行ってください!」、えっと、また JavaScript ですか?まずはコードを見てください:
#これは金の卵のクリック イベントです。AJAX を使用してアクセスされるページ Lott1.php があり、チャンス変数は現在のユーザーが卵を粉砕する機会です。
(学習ビデオ共有: プログラミング入門
)lottary1.php?chance=1 に直接アクセスしようとしましたが、エラー文字列 Lotto1.php が返されました。 ?chance= 0 もエラーを返します。lottery1.php?chance=-1 もはエラーを返します。効果はありませんか?金の卵スマッシングのページを更新しました、すごいですね! !
#-1 を渡したらオーバーフローが発生しましたか?いくつか潰してみましたが、毎回引換券をゲットできました! !非常にすばらしい。そこでクーポンを使って注文してみたところ、数ドル節約することができました。結局注文しましたが、私はまだそれほど悪くありません、ワカカ)すぐにカスタマーサービスに連絡しましたが、非番であり、QQ はオンラインではなく、電話も繋がらなかったので、連絡する必要がありました。伝言を残す。 ######次はどうする?卵を砕け! 42億の金の卵はJSを書けば自動で潰されます!これまでに合計 3588 個の金の卵が砕かれましたが、そのうち少なくとも 2000 個以上は私によって砕かれました。うわー、カカたくさんのクーポンを手に入れました:
合計 185 ページ、笑、かなり壮観です! ! ! 2 日に共同購入サイトのコードを再確認したところ、さらに深刻な問題が見つかりました。JS# にそのようなメソッドがありました。## 一見、お金に関係があるように思えますが、ユーザーIDと金額を入力して、どのような効果があるのか試してみてください。
ユーザーIDを取得するにはどうすればよいですか?心配しないでください:
この 96204 は私の現在のアカウントの ID です。アクセスすると、「オフライン リチャージが成功しました」と返されました。すごいですね。リチャージページに許可の確認がないのですが?アカウントの残高を確認すると、確かにリチャージが成功しました:
残高は 20,000 です。すごいです。 !この脆弱性は致命的すぎるため、すぐにカスタマー サービスにメッセージを残してください。私がメッセージを残した直後、開発者から話し合いの電話がかかってきました。金の卵を砕くという脆弱性問題は、新しく発見された脆弱性を一緒に伝えるのにちょうど良かったです。開発者の生活は大変で、元旦の夕方10時を過ぎてもコードを変更しなければなりませんでした。
添削後、上司から何かプレゼントがあるかもしれないとのことで、とても楽しみです(笑)。
ついに彼は私の口座残高を清算してくれたので、私は心の中で叫びました。「いや、欲しい、私の2万元~~~~~~~~
要約すると: 前編-エンド検証は信頼性が低く、必要に応じてバックエンドを検証する必要がある; アクセス権限を管理ページに追加する必要がある; バックエンドに渡されるデータは
正当性を検証する必要がある; 不要なパラメータが渡された場合たとえば、卵割りの場合、現在のユーザーが所有する卵割りの機会を
バックグラウンドに渡す必要がある理由がわかりません。データベースから直接読み取られるのでしょうか?ユーザー ID は平文で表示されるべきではありません。さらに、XSS クロスサイト スクリプティング攻撃 (通常はホスト ヘッダーを判断することによって) を防ぐ必要があります。
私の Web サイト: http://i.goto327.top:85/
関連する推奨事項:ウェブサイトのセキュリティ
以上が共同購入ウェブサイトの抜け穴について話し合うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。