Google Maps JS API v3を使用して、「この衛星/航空写真にどのような場所や記念碑があるかを推測する」タイプのブラウザ内ゲームを作成しています。スクリーンショットをとることはできません。具体的にはPermission Guidelines for Google Mapsで禁止されているようです。ローギングフルーツ:JavaScriptの値を難読化する
しかし、私は不正行為から保護する必要がある - あなたは不正ユーザーはこのデータだけを取得するソースを表示する必要があることを意味する、google.maps.LatLngとズームレベルto the map constructorに合格する必要があります。
<script type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var myOptions = {
center: new google.maps.LatLng(55, 145), /* this */
zoom: 10, /* and possibly this */
mapTypeId: google.maps.MapTypeId.SATELLITE,
}
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
}
</script>
マップを壊すことなく(例えば、center
や操作機能setZoom()
など)、匿名関数でマップを初期化する(オブジェクトがグローバル名前空間に表示されないようにする)ことはできません。
これはもちろん、ブラウザ内のクライアントサイドの信頼できないJavaScriptです。私はobfuscationタグの多くを読んでおり、私はスクリプトを弾丸にすることを試みているわけではありません(結局のところゲームです)。 Bruce Schneierが書いているように、1337 Java5kryp7 haxz0rz - 「kid sister encryption」に対して難読化を合理的に難しくする必要があります。 lowest-hanging fruitを削除することで、Base64エンコーディングよりも難しいものはmost cheatersになります。スマートでJSデバッガを使用できると判断された場合、Google Maps APIに平文で値を渡す必要があります。大規模で起こることは考えにくい(不正行為を防ぐために、コードに関連しない他の方法もあるだろう)。
私はvariousminimizersとobfuscatorsを試してみたが、それらは主に(この場合は「秘密」ではありません)コードを扱います、変数の値は、まだそのまま示しています。
@ Pointyの提案では、HTTPリクエストを厳密にチェックし、そのうちの1つはURLの緯度/経度を送信します。それは残念ですが、このリクエストは他の多くのリクエストの間に発生しますので、すぐに気付かれることはありません。幸いなことに、目標はそれをより堅くにすることだけです。
TL; DR:私はJavaScriptで三つの値を難読化する必要があります。私は防弾鎧、くしゃみのガードを探しているわけではありません。私は何を使うべきですか?
平文の値はURLで外出する必要はないのですか?すべての人は、TamperDataをインストールして、すべてのHTTPトラフィックの進行を監視する必要があります。 – Pointy
@Pointy:1)マップタイル(要求される)は物理的な場所と1対1の相関を持ちますが、返されるJSONデータの位置も、場所と密接に関連していますが、さらに2)ユーザーの90%の知識を超えていることが私の主張です。私が言ったように、私は、10歳の自称 "l33t haxx0r"を止めるための防弾対策は必要ありません。 – Piskvor
それはあなたのゲームとあなたの時間です:-)私の主張は、Firebugや何かを使うよりもTamperData(またはそのようなもの)を使用することが、POSTボディと同様にすべてのリクエストとレスポンスヘッダを表示するので、はるかに簡単です。 – Pointy