debiruはてなメモ

はてなブログの HTML が Invalid なの、わたし、気になります

MDN 翻訳コミュニティで私がやったこと

MDNの翻訳活動に参加した話

この記事は 2023 年の MDN 翻訳 Advent Calendar 向けに作成したものです。

こんにちは。debiru です。私は MDN が Mozilla Developer Network だった頃からよく MDN の記事を読んだり、内容に誤りがあれば修正したりしていました。ちなみに MDN が MDN Web Docs と呼ばれるようになったのは 2017 年 6 月頃のようです。

当時、私がよく MDN を見ていたのは確か 2012 年頃だったんじゃないかと思います。その頃の MDN は Wiki エンジンが採用されていて、Web ページ上で記事を直接編集できる仕組みがありました。より詳細には少し古いですが「MDN のあゆみ」(いつ書かれた?)が参考になるかもしれません。

そして気づけば、MDN は GitHub で管理されるようになりました。記事の編集も GitHub の Pull Request ベースで行われるようになっています。GitHub で管理されてからは初めてだったのですが、2022 年 2 月にある記事を編集したくなって、編集するにあたって案内されていた Mozilla コミュニティの Slack に参加することにしました。

続きを読む

Ubuntu 22.04 で tinydns が応答しなくなる問題

背景

Ubuntu 22.04 をインストールして、tinydnsソースコードからインストールしたところ、tinydns の動作が不安定になる症状が生じた。

Ubuntu 20.04 ではそのような不具合はなかったので調べることにした。

TL;DR 結論

tinydns インストール前に tinydns-conf.c-d300000-d400000 に変更してから tinydns-conf コマンドで /etc/tinydns へインストールを行う。

既に tinydns インストール済みの場合は、/etc/tinydns/run を編集して -d300000-d400000 に変更してから tinydns を再起動する。

再起動は OS ごと sudo reboot で再起動してもよいし、tinydns だけ再起動する場合は svc -k /etc/tinydns を実行する。

症状

tinydns 起動後、dig の問い合わせに対して最初の数回は応答が返るものの、その後一切応答が返らなくなる(ゾーンが存在しないドメイン名に問い合わせたかのような応答となる)。

続きを読む

VALUE-DOMAIN に存在していた2種類のドメインハイジャック脆弱性について

2022年3月2日に確認した VALUE-DOMAIN でのサブドメインハイジャックが可能な脆弱性について経緯を説明します。

ついでに2016年の記事「VALUE-DOMAIN に存在していたアカウント乗っ取り可能な CSRF 脆弱性について」の続報も含めて、この記事で2022年現在の VALUE-DOMAIN の状況についてお伝えします。

脆弱性を2つ発見しました

2022年3月2日に第一の脆弱性を、3月9日に第二の脆弱性を発見しました。これらについて順に説明します。

第一の脆弱性については、私よりも先に発見していた方がいます。その方から情報を聞いて検証し、私が IPA に届出したという経緯です。

続きを読む

Invalid な HTML のせいで counter-reset の仕様が捻じ曲げられた件

hn要素をナンバリングするテクニック

ここは h2 のセクションです。このブログではPC版のみですが、見出し文言の左上に ::before 疑似要素でCSSによる自動ナンバリングを行っています。

見出し1-1

ここは h3 のセクションです。

見出し1-1-1

ここは h4 のセクションです

見出し1-1-2

ここは h4 のセクションです

見出し1-2

ここは h3 のセクションです。

見出し1-2-1

ここは h4 のセクションです

いつの間にかこの採番がずれていた

body { counter-reset: n1 n2 n3 n4 n5 n6; }
h1 { counter-increment: n1; counter-reset: n2 n3 n4 n5 n6; }
h2 { counter-increment: n2; counter-reset: n3 n4 n5 n6; }
h3 { counter-increment: n3; counter-reset: n4 n5 n6; }
h4 { counter-increment: n4; counter-reset: n5 n6; }
h5 { counter-increment: n5; counter-reset: n6; }
h6 { counter-increment: n6; }

h1::before { content: counter(n1) "."; }
h2::before { content: counter(n1) "-" counter(n2) "."; }
h3::before { content: counter(n1) "-" counter(n2) "-" counter(n3) "."; }
h4::before { content: counter(n1) "-" counter(n2) "-" counter(n3) "-" counter(n4) "."; }
h5::before { content: counter(n1) "-" counter(n2) "-" counter(n3) "-" counter(n4) "-" counter(n5) "."; }
h6::before { content: counter(n1) "-" counter(n2) "-" counter(n3) "-" counter(n4) "-" counter(n5) "-" counter(n6) "."; }

こんな雰囲気のCSSを書いています。

「1章目」の例では、1, 1-1, 1-1-1, 1-1-2, 1-2, 1-2-1 となるべきです。

それがなんと Firefox の最新版で見たら 1, 1-1, 1-1-1, 1-1-2, 1-2, 1-2-3 となっていたのです。より分かりやすい図をお見せしましょう。

赤字に自動採番、黒字に本来のナンバリングを示した図

赤字と黒字が同じになるのが期待する状態ですが、Firefox ではバージョン82からこの挙動が変わって、自動採番の結果が異なるものになっていたのです。

続きを読む

POJ-1082をショートコーディングしてみたよ!

はじめに

競技プログラミングが普及して、AtCoderAOJ とする日本語のジャッジシステムが登場して久しいものです。私が大学時代にICPCに参加していた頃(2006年頃)は日本語のジャッジシステムは存在せず、北京大学のオンラインジャッジシステム(POJ)をよく利用していました。

今回は、そんな POJ - 1082 の問題をショートコーディングする話です。この問題はICPCアジア地区予選、2001年韓国Taejon(テジョン)の A 問題です。アジア地区予選の1問目、納得できる難易度です。

続きを読む

失効証明書とOCSPの不思議な関係

1月29日に271万件のLet's Encrypt証明書が失効した

特定の条件で発行したLet's EncryptのSSL/TLSサーバ証明書が無効化されるニュースが2022年1月26日(日本時間)に発表されました。該当者にはメール通知が届いており、jpドメインだけ見れば2月9日時点で7割ほどが対応済み(詳細は4章を参照)のようです。

通常、一度発行したサーバ証明書は期限(expires または notAfter と呼ばれるもの)までは正常な動作のために使用することができますが、期限内であっても何らかの理由で証明書が失効(revoke)させられることがあります。

Let's Encrypt の場合は certbot revoke コマンドを実行することで意図的に失効させることもできます。

失効しているかどうかの情報は証明書自体は持っていません。それは、ある事情で社員証を返すのが遅れ、退職日以降もその会社の社員証を持っているような状況に似ています。Webブラウザは、証明書が有効なものかどうかを別の手段で確認する必要があります。

この記事では簡単のため「Webサーバ」と「Webクライアント(Webブラウザ)」の関係で説明しますが、この記事の内容は「TLSサーバ」と「TLSクライアント」の間に成り立つ仕組みの話です。

続きを読む

ssmjp 2019/04 参加記 - 黒塗りのDNS

ssmjpに参加しました

#ssmjp 2019/04 - DNSの話を聞く会

「ささみjp」のDNSの回に行ってきました。「#ssmjpとは」にちらっと書いてあるけど、新橋で開催されていた勉強会で Shimbashi-Study-Meeting 略して ssmjp らしいです。

「浸透いうな」の @tss_ontap_o さんが「黒塗りのDNS (萎縮編)」をこの ssmjp で発表すると聞いて参加しました。

続きを読む

Next debiru's HINT 「WebはWEBじゃない