いくつかの背景
私はタンブログを持っています。
私にも元カノがいます。
この人物は執拗に私の投稿にアクセスしており、私たちの関係の性質 (またはその関係の欠如) を考えると、これはかなり不安なことだと思います。私の目標は、確立した URL を変更せずに、彼女、または彼女/彼女の友人/家族である可能性のある人へのアクセスを防ぐことです。
攻撃の計画
私はサードパーティのホストでブログをホストしていないため、彼女のアクセスをブロックするのに役立つツールにほとんどアクセスできません. ただし、必要なソリューションがある場合は、ホスティングを所有しています。私は専門家ではありませんが、私の知る限り、JavaScript は少なくとも彼女をだまして私のページにアクセスできないと信じ込ませる唯一の方法です。
私はスクリプトをハックしましたが、いくつかのガイダンスを本当に感謝しています。jQuery と jQuery Cookie プラグインを使用して、私の目標を示すコードを作成しました。始めましょう。
var ips = "{text:Ips}"; // String generated by tumblr: IP addresses separated by a space
var towns = "{text:Towns}"; // Same but with towns
var iparray = ips.split(" ");
var townarray = towns.split(" ");
$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?",
function(data){ // JSON request that returns geolocation data
for(i = 0; i < townarray.length; i++){
if (data['geoplugin_city'] == townarray[i]) // Test to see if user is accessing from a blacklisted town
{
if ($.cookie('banned_ip_tumblr')) // Looks for evidence of tracking cookie, if found: we stop loading, hide any content that was rendered, and send the user back up to 3 pages.
{
window.stop();
$('#all').hide(); // Div that wraps all content in body
history.go(-3);
history.go(-2);
history.go(-1);
}
else // Sets a cookie destined to be stale. Really stale. Then proceed with hiding posts
{
$.cookie('banned_ip_tumblr', 'true', { expires: 365, path: '/' });
$('#all').hide();
history.go(-3);
history.go(-2);
history.go(-1);
window.stop();
}
}
}
for(i = 0; i < iparray.length; i++){
if (data['geoplugin_request'] == iparray[i]) // Same as above, IP style.
{
if ($.cookie('banned_ip_tumblr'))
{
window.stop();
$('#all').hide();
history.go(-3);
history.go(-2);
history.go(-1);
}
else
{
$.cookie('banned_ip_tumblr', 'true', { expires: 365, path: '/' });
window.stop();
$('#all').hide();
history.go(-3);
history.go(-2);
history.go(-1);
}
}
}
}
);
if ($.cookie('banned_ip_tumblr')) // If the user has been caught but is now connecting from a new host, there is a chance this will catch them
{
window.stop();
$('#all').hide();
history.go(-3);
history.go(-2);
history.go(-1);
}
既知の障害点
- ユーザーが JS を無効にしている場合、またはプラグインを使用して JS をフィルタリングしている場合、これは失敗します。
- ユーザーがモバイル デバイス (iPod touch でテスト済み) を使用している場合、これは失敗します。
- ユーザーが Internet Explorer を使用している場合、これは失敗します。
- ユーザーが Web プロキシを使用している場合、これは失敗します。
最後に
これは、IP / 地理位置情報に基づいてアクセスをブロックする私の理想的な方法ではありませんが、現在の知識でできる最善の方法です。私が置かれている状況に不安を感じていますが、ユーザーのアクセスをブロックするためのあまり一般的ではないアプローチを検討する機会でもあると考えています。JS を使用せずに実行できるソリューションと同様に、JS を使用せずに実行できるソリューションを聞くのが楽しみです。
私の間違いが私のコードや概念に現れているので、間違いを指摘してください(たくさんあると思います)。コードをある程度上手に書く習慣をつけたいと思います。
Stack での投稿はこれが初めてですが、プロジェクトをまとめる際にこのコミュニティを何度も使用してきました。私の問題を読んで検討していただきありがとうございます。ご意見をお待ちしております。