- ベストアンサー
ランキングの不正をさせないスクリプト
Flash Light1.0のゲームのランキングを作成しております。 getURLでスコアとタイムの値をランキングへ飛ばしていますが URLを書き換えれば不正ができてしまいます。 ランキングの不正をなくす為にscoreとtimeの値を暗号化したいと考えております。 そのような事は可能でしょうか? また暗号化以外にも不正を無くさせる方法があれば教えて下さい。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> getURL("ランキング先" add seikairitu add "&time=" add time2 add "&type=add","","POST"); これはGETやPOSTの指定以前にパラメータが付いたURLを明示的に記述しています URLにあたる引数の記述はランキング先だけで、余計な文字列は必要ありません GET や POST を指定すると、自動的にその階層の変数が全てパラメータとして送信されます (全て送られたくない場合は、専用のMC内などにボタンを作って下さい) まず、以下の2つの違い確認して下さい (PCの場合Flashはブラウザで閲覧すること) on(press, keyPress "#"){ getURL("ランキング先", "", "GET"); } on(press, keyPress "#"){ getURL("ランキング先", "", "POST"); } ランキング用のパラメータを新たに作りたい場合は、 getURLの前に記述してください //例 http://ランキング先.php?score=100&time=15.085&type=add の場合 score = スコア記録が入った変数 time = タイム記録の入った変数 type = "add"; getURL("ランキング先.php", "", "POST"); > また、URLはどのように変更されるのでしょうか? POSTで送った場合、ランキング先.phpのみしかURLに表示されません
その他の回答 (2)
- suzuki-_-
- ベストアンサー率77% (152/195)
・getURLのmethod Flash Light ではなく Flash Lite のことだと思いますが、 "携帯端末向けのみ"に公開しているのならば、特に暗号化せず getURLのmethodをPOSTとすれば不正データは送られてこないと思いますよ *理由1 URL自体にはパラメータがないので書き換えができない *理由2 携帯端末においてPOSTデータの解析は限りなく不可能に近い //例 on (keyPress "1") { score = 1000; time = 100; getURL("ランキング先", "", "POST"); } もちろんランキングシステム側もPOSTデータのみを参照するように変更する必要があります PC上の制作過程においてmethodをPOSTとしたgetURLの動作を確認する際は、 FlashPlayerのスタンドアロン版で確認せずに、ブラウザ等で確認して下さい スタンドアロンで確認してしまうと、getURLのmethodをPOSTとしても強制的にGETとして処理されてしまいます // ・どうしても暗号化させたい 回答者No1さんの仰っるような暗号化アルコリズムを適用させたいところですが、 FlashLite1.xでは独自関数も定義できませんし(callは別物)、 配列は擬似的にしか作れない、シフト演算子も使えない等、弊害がもりだくさんで、 組み込む労力を考えると全く理にかなうものではありません FlashLiteでは、1文字ずつアスキーに変換してから、 独自の方法でその内容を変え文字列に戻す(->暗号化される)、 というのが比較的簡単だと思います その暗号化手段をランキングシステムでも使用します 具体的な内容は復号化手段まで述べるようなものなので割愛します // ・その他 auの場合、閲覧中のURLを表示する為には、 お気に入りに登録からしか見れなかったような気がします HTML側のmetaタグでお気に入りの登録内容を変更できるので、 そこで表示しないようにすればGETでもURL自体を見せないことが可能かもです また、ランキングへの参加をデータフォルダからでも可能にしている場合は、 getURLの際に「http://~~にジャンプしますか?」みたいな警告が出ると思うので、 パラメータを無理矢理長くして後半を見せなくする+前途のお気に入り変更を使う、というのも有用かもしれません (これに関してはほとんどが"気がする""出来るかも"で、推測です)
補足
ご回答ありがとうございます。 >Flash Light ではなく Flash Lite のことだと思いますが 書き間違えました。Flash Liteでした! ランキングの飛ばし方についてですが 変更前は以下のように行っておりました。 on(press, keyPress "#"){ getURL("ランキング先" add seikairitu add "&time=" add time2 add "&type=add"); } そこで以下に書き換えました。 on(press, keyPress "#"){ getURL("ランキング先" add seikairitu add "&time=" add time2 add "&type=add","","POST"); } そのリンクへ飛び、お気に入りに登録してアドレスを確認したのですが http://ランキング先.php?score=100&time=15.085&typ=add のように何も変更されませんでした。 getURLにscoreとtimeが入っていれば書き方が変わってくるのでしょうか?また、URLはどのように変更されるのでしょうか? お手数ですがご回答宜しくお願いします。
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
scoreとtimeとパスワードをmd5やsha1してやって、値を判別するなんていう手法が一般的じゃないかな?と思います。 ?score=100&time=10&sh=42341AAFDADFA76876FAD sh = md5(score + password + time); こんな感じで。 CGI側も同じくmd5で値を算出して、shが正しいかをチェックする。 passwordの部分も動的に変わると良いかも知れません。 md5やsha1のスクリプトはWEB上を探すと見つかるんじゃないかと思います。
お礼
ご回答ありがとうございました。 Flash Lite1.0は使用できないそうですが、 今後PC用で作成する際参考にさせて頂きます。
お礼
ご回答ありがとうございます。 POSTを指定するとgetURLの中に記入しなくても送信できたのですね。 理解できました。 詳しく教えて頂きありがとうございます。