2016-12-01 7 views
1

特定のサイト(例:facebook.com)が特定の投稿要求を送信するのを防ぐことはできますか?特定の投稿要求を送信するウェブサイトを防止する

特定のURLに投稿するためにFacebookを「禁止する」方法はありますか?

私は、彼らがHTTPサーバに接続する前に、ウェル(HTTPリクエストを行うことから、ネットワークレベルでそれらをブロックのショートを第三者に防ぐことはできません

答えて

0

https://www.messenger.com/ajax/mercury/delivery_receipts.php?dpr=2」要求をブロックしようとしていますIPアドレスを使ってリクエストを検出することができます(下記参照)。

このサードパーティを検出して別の方法で処理することができます(たとえば、すぐに403エラーが返されます)。第三者を検出する

主な方法は以下のとおりです(変更される可能性があると他の人と共有する可能性がある)

  • 彼らのIPアドレス
  • 彼らのユーザーエージェント文字列(変化にそうですあなたの検出を回避しようとしているのではなく、標準ブラウザのユーザエージェントと衝突する可能性がある)。
  • Cookieなどの資格情報が不足しています(URLにアクセスするには、他のユーザーに資格情報を与える必要があります)。

しかしながら、一般的には、URLにGETリクエストは無害でなければなりません。作成を中止しようとすると、リクエストに副作用(データベースから何かを削除するなど)があるためです。

もしそうなら、解決策はPOST要求を要求することです。 HTTPの仕様には、0​​と書かれています。

+0

私は私へのアクセスをブロックするが、私はポストの要求をブロックしようとしているのアイデアをあなたと思います。私はFacebookの権利に情報を送るのですか?私はチャットで "メッセージが読まれました"という情報について話しています。言い換えれば、それは「私がFacebookの要求を送信して、Facebookのメッセージを見ているかどうかを更新するようFacebookに通知するのを阻止しようとしている」ということです。私はそれがいずれかの方法で解釈できることを理解します – Glutch

+0

@Glutch - ああ。 [Superuser](http://superuser.com/)に適したもののように聞こえます(「インストールソフトウェア/ブラウザの設定」ではプログラミングではなく)。 – Quentin

+0

私は半馴染みですスーパーエージェントは、リクエストを行うためにそれをたくさん使っていました。スーパーエージェントでリクエストを送信するのを防ぐことは可能ですか?ブラウザのプラグインで何らかの方法でスーパーエージェントを使用して、ブラウザからPOSTリクエストを送信できないようにすることはできますか? – Glutch

0

クライアント側でAJAXリクエストを防ぐことができます。

最初にXMLHttpRequest.prototype.openを上書きする必要があります。この関数では、元のopen関数を、指定された引数で呼び出します。次に、このXMLHttpRequestsend関数への参照を格納します。最後に、このXMLHttpRequestsend機能を上書きします。

新しいsend関数では、open関数呼び出しに提供されたメソッドとポスト引数を比較します。それが比較に合格した場合は、元の引数で元のsend関数を呼び出します。合格しなかった場合は、何もしないで、要求をブロックしました。

function blockXHR(compare) { 
    const open = XMLHttpRequest.prototype.open; 

    XMLHttpRequest.prototype.open = function(method, url) { 
    open.apply(this, arguments); 

    const send = this.send; 

    this.send = function() { 
     if(compare(method, url)) { 
     return send.apply(this, arguments); 
     } 
     console.log('blocked request'); 
    }; 
    }; 
} 

以下のデモのコードコードの残りは、このコードの使用方法を示すために存在し、動作することを示しています。簡単にするために、私はECMAScript 2015言語仕様で導入されたいくつかの機能を使用しましたが、これらの機能はどれもこのタスクを達成するためには必要ありません。

function blockXHR(compare) { 
 
    const open = XMLHttpRequest.prototype.open; 
 
    
 
    XMLHttpRequest.prototype.open = function(method, url) { 
 
    open.apply(this, arguments); 
 

 
    const send = this.send; 
 

 
    this.send = function() { 
 
     if(compare(method, url)) { 
 
     return send.apply(this, arguments); 
 
     } 
 
     console.log('blocked request'); 
 
    }; 
 
    }; 
 
} 
 

 
const requestFactory = (method, url, callback) => { 
 
    const xhr = new XMLHttpRequest(); 
 
    xhr.addEventListener('load', callback); 
 
    xhr.open(method, url); 
 
    xhr.send(); 
 
}; 
 
const comparisonFactory = (targetMethod, targetURL) => 
 
    (method, url) => !(method === targetMethod && url === targetURL); 
 
const callback = event => console.log(event.target.status); 
 

 
blockXHR(comparisonFactory('POST', 'http://placehold.it/1x1')); 
 
requestFactory('POST', 'http://placehold.it/1x1', callback); // blocked request 
 
requestFactory('GET', 'http://placehold.it/1x1', callback); // 200 
 
requestFactory('POST', 'http://placehold.it/1x1?hello', callback); // 200

関連する問題