-2

Web訪問者に無料でダウンロードしたいのですが、Facebookの「いいね」ボタンをクリックするまでダウンロードリンクを非表示にします。気に入ったら、jqueryはボタ​​ンをアクティブにし、タグに「href」属性を追加します。これにはファイルへのパスが含まれているため、ユーザーはリンクをクリックしてファイルをダウンロードできます。

問題は、ユーザーがブラウザでhtmlのソースを表示するときにパスを簡単に確認できることです。パスを読みにくくするための簡単な方法はありますか(私はJavaScriptコードをPHPファイルに入れています)?

人々がそれを難読化することができるとき、それは大丈夫です。上級ユーザー以外のユーザーにとっては読みにくくしたいので、コードをわかりにくくする方法を見つけるのではなく、リンクを気に入ってもらうことを検討します。

ありがとうございました

4

4 に答える 4

3

もちろん、これを実際に適切に行う唯一の方法は、ボタンを押してサーバーにラウンドトリップし、ajaxなどを介してURLを取得することです。

しかし、それをしたくなくて、それを曖昧にしたいだけなら、たくさんのオプションがあります。たとえば、Base-64base64_encodeエンコーディングは、PHPとJavaScriptの両方で優れたサポートを備えているため、PHP側でパスをエンコードし(を使用)、ボタンを押すとJavaScriptでデコードできます(Stack Overflowで説明したいくつかのソリューションのいずれかを使用) )。

于 2012-12-07T14:28:09.633 に答える
1

あなたはこのようなことを試すことができます:

ob_start();
# Insert regular JavaScript here...
$generatedoutput = ob_get_contents();
ob_end_clean();
$generatedoutput = str_replace("\\\r\n", "\\n", $generatedoutput);
$generatedoutput = str_replace("\\\n", "\\n", $generatedoutput);
$generatedoutput = str_replace("\\\r", "\\n", $generatedoutput);
$generatedoutput = str_replace("}\r\n", "};\r\n", $generatedoutput);
$generatedoutput = str_replace("}\n", "};\n", $generatedoutput);
$generatedoutput = str_replace("}\r", "};\r", $generatedoutput);
require('javascriptpacker.php');
$myPacker = new JavaScriptPacker($generatedoutput, 62, true, false);
$packed = $myPacker->pack();
echo($packed);

そして、次のように追加します。

<script language="JavaScript" type="text/javascript" src="js.php"></script>

注意:元々はsites.google.com/a/vansteenbeek.net/archive/obfuscate_javascriptからのもので、現在は404です。

于 2012-12-07T14:24:00.143 に答える
1

おそらく、パスサーバー側を保存し、アイテムが「いいね」されたら、フロントエンドに特別なコードをリモートエンドポイントに渡させることができます。

$([however you're binding to the like button]).on('click', function() {
 $.getJSON('/download_link.php', {'key': <some unique key>}, function(response) {
   if(response.status == 'valid') {
     $('<div><a href="' + response.path + '">Download the item now!</a></div>').appendTo('body');
   }
   else {
     alert('invalid security key');
   }
 });
});

人々がルーチンを簡単に見ることが心配な場合は、packer(http://dean.edwards.name/packer/)にアクセスしてください。安全ではありませんが、平均的なジョーがコードを簡単に見ることを思いとどまらせます。

参考までに、上記のコードはパックすると次のようになります。

eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$([m h\'9 e l 2 5 6]).7(\'8\', 3() {\n     $.b(\'/c.d\', {\'1\': <f g 1>}, 3(0) {\n       i(0.j == \'k\') {\n         $(\'<4><a n="\' + 0.o + \'">p 2 q r!</a></4>\').s(\'t\');\n       }\n       u {\n         v(\'w x 1\')}})});',34,34,'response|key|the|function|div|like|button|on|click|re||getJSON|download_link|php|binding|some|unique|you|if|status|valid|to|however|href|path|Download|item|now|appendTo|body|else|alert|invalid|security'.split('|'),0,{}))

download_link.phpファイルから次のものを返す必要があります。

<?php
  if(valid_key($_REQUEST['key'])) {
     header('Content-Type: application/json');
     echo json_encode(array('status' => 'valid', 'path' => generate_secret_path()));
  }
?>

お役に立てば幸いです。

于 2012-12-07T14:32:43.857 に答える
0

あなたがやりたいことをする方法はたくさんあります。URLを作成できる簡単なアルゴリズムを次に示します。これをインスピレーションとして使用できます。次のアルゴリズムはURLを構築します"http://www.google.com/"

var url = [
    72, 84, 84, 80, 26, 15, 15, 87,
    87, 87, 14, 71, 79, 79, 71, 76,
    69, 14, 67, 79, 77, 15
].map(function(u) {
    return String.fromCharCode(u + 32);
}).join('');

console.log(url);
于 2012-12-07T14:31:08.707 に答える