特定のサイト(例:facebook.com)が特定の投稿要求を送信するのを防ぐことはできますか?特定の投稿要求を送信するウェブサイトを防止する
特定のURLに投稿するためにFacebookを「禁止する」方法はありますか?
私は、彼らがHTTPサーバに接続する前に、ウェル(HTTPリクエストを行うことから、ネットワークレベルでそれらをブロックのショートを第三者に防ぐことはできません
特定のサイト(例:facebook.com)が特定の投稿要求を送信するのを防ぐことはできますか?特定の投稿要求を送信するウェブサイトを防止する
特定のURLに投稿するためにFacebookを「禁止する」方法はありますか?
私は、彼らがHTTPサーバに接続する前に、ウェル(HTTPリクエストを行うことから、ネットワークレベルでそれらをブロックのショートを第三者に防ぐことはできません
「https://www.messenger.com/ajax/mercury/delivery_receipts.php?dpr=2」要求をブロックしようとしていますIPアドレスを使ってリクエストを検出することができます(下記参照)。
このサードパーティを検出して別の方法で処理することができます(たとえば、すぐに403エラーが返されます)。第三者を検出する
主な方法は以下のとおりです(変更される可能性があると他の人と共有する可能性がある)
しかしながら、一般的には、URLにGETリクエストは無害でなければなりません。作成を中止しようとすると、リクエストに副作用(データベースから何かを削除するなど)があるためです。
もしそうなら、解決策はPOST要求を要求することです。 HTTPの仕様には、0と書かれています。
クライアント側でAJAXリクエストを防ぐことができます。
最初にXMLHttpRequest.prototype.open
を上書きする必要があります。この関数では、元のopen
関数を、指定された引数で呼び出します。次に、このXMLHttpRequest
のsend
関数への参照を格納します。最後に、このXMLHttpRequest
のsend
機能を上書きします。
新しい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
私は私へのアクセスをブロックするが、私はポストの要求をブロックしようとしているのアイデアをあなたと思います。私はFacebookの権利に情報を送るのですか?私はチャットで "メッセージが読まれました"という情報について話しています。言い換えれば、それは「私がFacebookの要求を送信して、Facebookのメッセージを見ているかどうかを更新するようFacebookに通知するのを阻止しようとしている」ということです。私はそれがいずれかの方法で解釈できることを理解します – Glutch
@Glutch - ああ。 [Superuser](http://superuser.com/)に適したもののように聞こえます(「インストールソフトウェア/ブラウザの設定」ではプログラミングではなく)。 – Quentin
私は半馴染みですスーパーエージェントは、リクエストを行うためにそれをたくさん使っていました。スーパーエージェントでリクエストを送信するのを防ぐことは可能ですか?ブラウザのプラグインで何らかの方法でスーパーエージェントを使用して、ブラウザからPOSTリクエストを送信できないようにすることはできますか? – Glutch