マルウェア配布サイトやブラックリストの有害サイトにはアクセスしたくないものです。特に身に覚えのない送信元から届いたメンションやメールに表示されているURLは注意が必要です。先日のエントリ「Tweetbotから「はてなブックマーク」へ登録する方法」の応用で、URLをコピーするだけでスキャン結果を標準するスクリプトを作ってみました。短縮だけではなく通常のURLもスキャンします。
MyScripts 2.5
仕事効率化, ユーティリティ
App Storeで詳細を見る
このスクリプトはセキュアな短縮・展開URLサービスのux.nu – 短縮URLサービスが提供するWeb APIの利用をサポートするものです。結果は最近かじり始めたjQuery Mobileを使って表示さました。
もともとはURLをいろんなアプリに渡せるようにするスクリプトを作ろうとしていましたが、途中で短縮URLを展開する必要が出てきて、当初は想定していないものが出来上がった感じです。
MyScriptsにスクリプトを登録する
内蔵jQuery Mobileを使用しますのでバージョン1.6以上のMyScriptsが必要です。
iPhoneのブラウザからこのサイトにアクセスし、以下のリンクをタップするとMyScriptsが起動してスクリプトがペーストされますのでそのまま保存します。
MyScripts用スクリプト『URLChecker』の登録はこちら
URLChekcerを使ってみる
使い方は簡単です。MyScriptsを起動してURLCheckerの横にある□にチェックボックスを入れて、クリップボードのバックグラウンド監視モードにします(10分の制限があります)。あとはスキャンしたいURLを選択してコピーするだけです。短縮でも通常URLでも構いません。通知バーが現れたらタップして結果を表示させます。
ux.nuサービスが返してくるブラックリスト、マルウエア、安全情報を表示し、異常がなければ、このスクリプト側でThis URL may be safeと判定します。
短縮URLも同様にスキャン出来ます。多段階短縮されていても最終の展開後URLを表示します。URLはテキストボックスに入れました。
今度はメールアプリで試してみます。URLを長押ししてコピーするだけです。
ホーム画面からアプリ風に使う
おなじみの『Touch Icon Creator』でホーム画面にアイコンを配置します。上記のサンプルのようにURLコピーした後は、アイコンをタップすることでクリップボードにコピーされたURLをスキャンして結果を表示します。
Touch Icon Creator 3.5
ユーティリティ, 仕事効率化
App Storeで詳細を見る
コピーした内容がURL以外の場合
コピーした内容がhttp(s)以外で始まる文字列以外の場合にはメッセージが通知されるかMyScriptsで表示します。
危険なサイトを検知した場合
ux.nuサービスが危険なサイトであることを検知した場合は以下のように表示します。短縮URLと展開後URLのサンプルです。
URLCheckerのコード
Web APIが短縮URL、展開URL用で異なっているので、短縮URLかどうかを判定してから展開URLが返ってこない場合に非短縮URLと見なして短縮URL化するAPIを使っています。もっとスマートに出来ないものかと思っていますのでご指摘いただけると嬉しいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#LIB IS_HTML=true var rgex = /^http/; var expsec = 0 var shtsec = 0 var mes; var orgurl = TEXT; var expurl; if (TEXT.match(rgex)){ var url = "https://secure.ux.nu/hugeurl?url=" + orgurl +"&format=json" var xhr = new XMLHttpRequest(); xhr.open("GET",url, false); xhr.send(null); var res = xhr.responseText; var jdata = eval("("+res+")"); var bklist = jdata.data.blacklist; var mal = jdata.data.malware; var safe = jdata.data.safe; if(( bklist == "true") || ( mal =="true") ||( safe == "false")) expsec = 1 expurl = jdata.exp; if(jdata.exp==""){ var urlb = "https://secure.ux.nu/api/short?url=" + orgurl; var xhrb = new XMLHttpRequest(); xhrb.open("GET",urlb, false); xhrb.send(null); var resb = xhrb.responseText; var jdatab = eval("("+resb+")"); bklist = jdatab.data.blacklist; mal = jdatab.data.malware; safe = jdatab.data.safe; if((bklist == "true") || ( mal =="true") ||( safe == "false")) shtsec = 1 expurl = "" } if(expsec+shtsec ==0){ mes = "<div class=\"safe\">This URL may be safe</div>" htmlview(orgurl, bklist, mal, safe, expurl, mes); } else { mes = "<div class=\"unsafe\">This URL may /NOT/ be safe</div>" htmlview(orgurl, bklist, mal, safe, expurl, mes); } } else { "INFO: Your copy doesn't begin with http(s)" } function htmlview(stra, strb, strc, strd, stre, strf){ var html ="<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Shorten URL Checker</title>\n<link rel=\"stylesheet\" href=\"./jqm/jquery.mobile.css\" />\n<script src=\"./jquery.js\"></script>\n<script src=\"./jqm/jquery.mobile.js\"></script>\n<style type=\"text/css\">\n.safe{\n font-weight:bold;\n color:#008000;\n text-align:center;\n}\n.unsafe{\n font-weight:bold;\n color:#ff0000;\n text-align:center; \n}\n.disc{\n text-align:right;\n font-style:italic;\n}\n</style>\n</head>\n<body>\n<div data-role=\"page\">\n<div data-role=\"header\">\n<h1>URL Checker</h1>\n</div><!-- /header -->\n<div data-role=\"content\">\n<div data-role=\"fieldcontain\">\n<label for=\"textinput2\">Original URL:</label>\n<input id=\"textinput2\" placeholder=\"\" value=\"" + stra + "\" type=\"text\" />\n<p>\n<dd>Blacklist: " + strb + "</dd>\n<dd>Malware: " + strc + "</dd>\n<dd>Safe: " + strd + "</dd>\n<p>\n<label for=\"textinput1\">Expanded URL (Optional):</label>\n<input id=\"textinput1\" placeholder=\"\" value=\"" + stre + "\" type=\"text\" />\n" + strf + "\n</div>\n<p class=\"disc\">Powered by <a href=\"http://ux.nu/developer.html\">ux.nu</a></p>\n</div><!-- /content --> \n<div data-role=\"footer\">\n<h4>BLOG of Daisuke</h4>\n</div><!-- /footer --> \n</div><!-- /page -->\n</body>\n</html>" return html; } |
今後の予定
冒頭のとおり自分が開きたいブラウザやアプリを選択してから起動させることができるようにする予定です。たとえば、iCab Mobile、Sylfeed、はてなブックマークなど都度セレクターで選択して自由に開けるようにしたいと考えています。いや、実は既に出来ていますがhtmlビューでカスタムUI化することでデザインが。。。
参考:JSON出力内容を確認するアプリ
ux.nuサービスを使ってJSON形式で出力された結果を取り出してhtmlに組み込んでいます。テンプレートを事前に設定しておくとパラ−メーターの組み合わせを簡単に変更して実行できますので便利です。
JSON+ API Response Parser 1.3.2
ユーティリティ, 仕事効率化
App Storeで詳細を見る