misskey-dev / summaly Goto Github PK
View Code? Open in Web Editor NEWThis project forked from syuilo/summaly
🔍 Get a summary of any web page
License: MIT License
This project forked from syuilo/summaly
🔍 Get a summary of any web page
License: MIT License
NPMではいまも2.7.0が配信されていますが、3.0はNPMで配信しますか?
サマリの取得機能に対し、下記の強化処置を施したいです。
取得対象のContent-Lengthの上限をパラメータとして取れるようにします。
また、Content-Lengthを返してこないサーバのサマリ生成を拒否するオプションも同時に提供します。
現在のの実装には外部から上限を設定できるようなインターフェースは無く、決め打ちの値が使用されています(サイズは10MBまで)。
上限が設けられているとはいえ、リンク先が大きければ大きいほど負担になります。なので、これを制御できるようにしたいです。
GETメソッドでbodyを取る前に、HEADメソッドでレスポンスヘッダの検証を行い、条件に合わない場合はサマリの生成を行わないようにします。
現在のの実装は、URLの先をGETで取得してからヘッダ内容の判定などを行っています 1 。
GETメソッドによりbodyまで取得されているため、音声ファイルや動画ファイルなどのメディアやPDFなどの巨大なファイルのリンクが貼られた時にマシンリソースを圧迫します。
related: misskey-dev/misskey#13569
Googleのセーフサーチはセンシティブ判定に、
<meta name="rating" content="adult">
<meta name="rating" content="RTA-5042-1996-1400-1577-RTA">
のようなメタデータを参照するそうで、サイトがセンシティブかどうかを判断する基準の一つとして使えそうです。
https://developers.google.com/search/docs/crawling-indexing/safesearch?hl=ja#add-metadata
また、HTTPヘッダーに、
rating: RTA-5042-1996-1400-1577-RTA
が含まれるかどうかでも判定が可能なようです。
P〇rnHubがメタタグ・HTTPヘッダー両方に対応しており、このメタデータを使用することでセンシティブと判定できるようになります。DLsiteはメタタグのみ対応。Twitterは非対応。
#22 の機能をMisskeyから使用したいので、その準備をします。
HTTP 429 (Too Many Requests) が Retry-After: 0で返ってくるので、cookieを継承したままretryすれば取得できます。
この動作に対する他のソフトウェアの対応状況ですが、Twitterはたいおうしていますが、discordは対応していない模様です。
参考: HTTP 429 https://datatracker.ietf.org/doc/html/rfc6585#section-4
参考: 調査スレッド https://misskey.niri.la/notes/9nobn2n2he なお、この中でogpの画像がskebのロゴになるという話がありましたが、今確認したところ正しく画像が帰ってきました: https://skeb.jp/@Colon_BR/works/42
Downstream issue: niri-la/misskey.niri.la#124
https://oembed.com/ 曰くhtmlは必須なので、ない方が悪いですがエラーになって取得できませんになってしまいます。
real world example: https://adventar.org/calendars/9018
TypeError: Cannot read properties of undefined (reading 'startsWith')
at getOEmbedPlayer (file:///Users/anatawa12/IdeaProjects/summaly/built/general.js:43:20)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Promise.all (index 1)
at async default (file:///Users/anatawa12/IdeaProjects/summaly/built/general.js:194:28)
at async summaly (file:///Users/anatawa12/IdeaProjects/summaly/built/index.js:37:21)
at async Object.<anonymous> (file:///Users/anatawa12/IdeaProjects/summaly/built/index.js:54:29)
twitter cardでは<meta name="twitter:image" content="url" />
の形式で指定されますが、summalyでは<meta property="twitter:image" content="url" />
を期待してるようです。
この結果、OGPが正しく設定されていないがtwitter cardが正しく指定されているVRChatのワールドのカードが正しく読み込まれていません。
https://vrchat.com/home/world/wrld_beddab1e-fee1-cafe-f00d-ca7c0dd1eca7
Related: GHSA-vc39-c453-67g3
本体でも修正されているものの
icon
thumbnail
player.url
あたりを http: OR https: OR data: のみでサニタイズするとベター
MastodonのリンクプレビューがDDoS的であると話題になっている(?)
https://gigazine.net/news/20240502-mastodon-share-link-problem/
summaly proxyをキャッシュサーバーとして捉えればこのような挙動は低減できるが、現状はそのような機能を正式にはサポートしていない (nginxを前段に抱えれば可能だが)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.