diff options
Diffstat (limited to 'services/nuldoc/content/posts/2022-11-19')
| -rw-r--r-- | services/nuldoc/content/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2.md (renamed from services/nuldoc/content/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2.dj) | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/services/nuldoc/content/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2.dj b/services/nuldoc/content/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2.md index bd752c2..9502489 100644 --- a/services/nuldoc/content/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2.dj +++ b/services/nuldoc/content/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2.md @@ -12,8 +12,7 @@ tags = [ date = "2022-11-19" remark = "公開" --- -{#intro} -# はじめに +# はじめに {#intro} 2023 年 3 月 23 日から 25 日にかけて開催予定 (記事執筆時点) の [PHPerKaigi 2023](https://phperkaigi.jp/2023/) において、 昨年と同様に、弊社 [デジタルサーカス株式会社](https://www.dgcircus.com/) からトークン問題を出題予定である。 @@ -26,8 +25,7 @@ remark = "公開" その 1 はこちら: [PHPerKaigi 2023: ボツになったトークン問題 その 1](/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/) -{#quiz} -# 問題 +# 問題 {#quiz} 注意: これはボツ問なので、得られたトークンを PHPerKaigi で入力してもポイントにはならない。 @@ -46,8 +44,7 @@ remark = "公開" "And Then There Were None" (そして誰もいなくなった) と名付けた作品。変則 quine (自分自身と同じソースコードを出力するプログラム) になっている。 -{#how-to-obtain-token} -# トークン入手方法 +# トークン入手方法 {#how-to-obtain-token} 実行してみると、次のような出力が得られる。 @@ -96,8 +93,7 @@ P トークン「#WELOVEPHP」が手に入った。 -{#commentary} -# 解説 +# 解説 {#commentary} 一見すると同じ行が 10 行並んでいるだけなのにも関わらず、なぜそれぞれの行で出力が変わるのか。ソースコードをコピーして、適当なエディタに貼り付けるとわかりやすい。 @@ -109,7 +105,7 @@ Vim で開くと次のようになる (1 行目を抜粋)。 `<200b>` と表示されているのは、Unicode の U+200b で、ゼロ幅スペースである。 -::: note +:::note エディタによっては、ゼロ幅スペースが見えないことがある。VSCode ではブラウザと同様に不可視だった。 ::: @@ -131,8 +127,7 @@ $s='<200b><?php printf((isset($s)?fn($s)=>trim($s,"<200b>"):fn($s)=>chr(strlen($ デコード部以外の部分は、quine のための記述である。 -{#outro} -# おわりに +# おわりに {#outro} [CVE-2021-42574](https://blog.rust-lang.org/2021/11/01/cve-2021-42574.html) に着想を得た作品。この脆弱性は、Unicode の制御文字である left-to-right mark と right-to-left mark を利用し、ソースコードの実際の内容を欺く、というもの。簡単のためゼロ幅スペースを用いることとし、ついでに quine にもするとこうなった。 |
