X software.
ウェブサイトの寿命は案外短いもので、記事に挿入したリンク先のサイトが全然別のサイトになっていたり、リンクが切れていたりするという連絡を読者の方からよく頂きます。リンク先が無害なサイトであれば良いのですが、フィッシングサイトやマルウェアサイトになってしまっていると大変危険だということで、URLから危険なサイトを判定してくれるGoogleのAPI「Web Risk」を利用して定期的にサイト全体のリンクをチェックする仕組みを作成しました。Web Risk|Google Cloudhttps://cloud.google.com/web-riskWeb Riskには記事作成時点で「Lookup API」と「Update API」の2つのAPIが存在しています。Lookup APIの方はURLを流し込めば直接安全か危険かを判定してくれるというわかりやすいAPIな一方、Update APIの方はハッシュの先頭数バイトが詰まったデータベースをダウンロード後、調べたいURLの先頭ハッシュが一致したら完全なハッシュを再度取得し、一致判定するという複雑な仕組みになっており、できれば片っ端からLookup APIを叩いて解決したいところ。料金表を確認すると、Lookup APIは10万回を超えた分について1000回あたり0.5ドル(約55円)の費用が発生するとのこと。GIGAZINEの記事をチェックしてみると、全部で約100万件ものリンクが存在しており、全てをLookup APIで処理した場合の一回の調査費用は約5万円です。一方Update APIの方は最初のハッシュデータベースのダウンロードは無料で、その後完全なハッシュの取得回数1000回ごとに50ドル(約5500円)という料金体系。料金の検討をするには、まずハッシュの先頭がどの程度の頻度で一致するのかを調べる必要があります。
To use API, you can create a service account from the GCP console and download the credentials.
ダウンロードした認証情報を「GOOGLE_APPLICATION_CREDENTIALS」環境変数に設定して準備完了。
Update APIのガイドに記載されているサンプルによると、ハッシュデータベースは下記の形式で取得できるとのこと。
All the opening hashes are passed in the form of base64, so the number of bytes specified in the "prefixSize" at hand is utilized for each partition. For future use, we save it in the json file, as shown below. Because this hash is updated at any time, you need to get a new hash every time you run a check in production.
このデータベースには4バイトの先頭ハッシュが合計4997件含まれていたため、安全なURLのハッシュが間違って判定されてしまう可能性は2の32乗分の4997で約20万分の1と計算できます。ここから100万件のリンクを調査する費用は約25円となり、Lookup APIと比較すると圧倒的に安価なためUpdate APIを採用することに。Update APIを利用する場合、まずURLからハッシュを作成する必要があります。ガイドに詳細な手順が記載されているため、ガイド通りに変換していくだけでOK。それぞれテストケースが記載されているので実装の際にはかなり助かります。URLの正規化のテストケースにある「http://\x01\x80.com/」→「http://%01%80.com/」だけはどういう変換なのか分からずじまいでしたが、GIGAZINE内にこのようなURLのリンクは設定されていないので無視しました。もし詳しい方が居れば、こちらのフォームからご連絡いただけるとありがたいです。
Since multiple hashes are generated from a URL, check that each database has a matching hash, and if all hashes do not match, the URL can be determined to be a secure URL. If there are any matches, use Update API's search for the first hash to get the complete hash list and verify that they match further. As shown in the figure below, we have created a malware judgment test and implemented it.
This completes the mechanism for checking the links contained in the site on a daily basis. Even if the old site is unwittingly abandoned and becomes a bad site, we can immediately notice and modify the link. Fortunately, at the time of the creation of the article, there was no URL identified by malware except for the test cases.
なお、GIGAZINEは現在求人中で、こうした内容に興味がある人を募集しています。応募お待ちしています。GIGAZINE採用情報. – GIGAZINEだからできることが、ある。https://gigazine.co.jp/
この記事のタイトルとURLをコピーする・関連記事機械学習でGIGAZINEの関連記事を自動生成するサーバーを作ってみました - GIGAZINE電力源を2つにして停電などの障害に強いシステムを構築できる「ATS」を導入してみた - GIGAZINE合計18万台近いHDDの故障率レポート2021年Q2版をBackblazeが公開、HDDとSSDの故障率比較も - GIGAZINEPCの電源を入れたままストレージを交換できるホットスワップに対応したリムーバブルケース「ICY DOCK MB326SP-B」を使ってみた - GIGAZINE無料でIFTTTやZapierっぽく全自動連携できる「n8n」を自サーバー上に構築してみた - GIGAZINE
Related content
- Tweet
In comments, Software, Security, Posted by log1d_ts
You can read the machine translated English article here.