Qiitaで3桁数字のユーザー名を登録するとバグが起きるかもしれない 50
ストーリー by nagazou
URL+名前だとこうなるのか 部門より
URL+名前だとこうなるのか 部門より
エンジニアコミュニティ「Qiita」では、一部のHTTPステータスコードと重複する数字などの名前を使用して登録するとエラーが発生する可能性があるらしい。@500さんの記事によれば、Qiitaに記事を書こうとアカウントを作成、適当にユーザー名を「500」に設定したところ意外にも通ってしまったそうだ。しかし、URL+名前で構成されたマイページにアクセスすると、障害が発生していると表示されるようになってしまった(@500さんの記事)。
同氏はこのトラブルはHTTPステータスコードと重複しているため発生したのではないかと推測している。同氏も「500」以外の名前では試してないので確実に再現されるかは不明だが、このようなHTTPステータスコードと重複する数字3桁のような名前を使うのは避けたほうがいいだろうと警告している。
同氏はこのトラブルはHTTPステータスコードと重複しているため発生したのではないかと推測している。同氏も「500」以外の名前では試してないので確実に再現されるかは不明だが、このようなHTTPステータスコードと重複する数字3桁のような名前を使うのは避けたほうがいいだろうと警告している。
昔似たようなURL設計のSNS作ったことがあった (スコア:2)
テストの段階でこういうの普通に踏むと思うんだけどこれくらいのテストしておかなかったのかなあ(実際当方は踏んで、ダメなユーザ名の一覧を作ってバリデーション条件とした)、とか、抑も数字だけのユーザ名は何となく避ける感覚なかったのかなあ、とか思うところはいくらかある
Re: (スコア:0)
ダメな名前一覧っていうか、普通は空間を分けると思う
Re: (スコア:0)
urlの構造の問題と同時に200以外で異常を表す正常なページを返す悪しき習慣の弊害もある。
# httpの仕様外の挙動してるんだからそれを考慮しなかったただの漏れとは言え
Re: (スコア:0)
それについてはQiitaがNginxをちゃんと使えていない可能性もある。
named location(location @hogeみたいなやつ)や、内部にinternal; [nginx.org]を置いたlocationブロックは、外部からのアクセスでは使用されなくなり、error_pageやその他Nginx内部リダイレクトでのみ到達できるlocationになる。こうするとhttps://example.com/500 で500用ページが丸見えというのは回避できる。
Qiita運営がそれを知らないのか、より下流のリバースプロキシ・CDN等で利用するため意図して/500などを公開しているのかは、外部の人間には分からない。
なお、QiitaがNginx使っているのは、HTTPレスポンスヘッダーフィールドのServerを見てそう判断した。
Re: (スコア:0)
E-mailアドレスを他のIDに流用した結果、使えない文字がゴロゴロと。
#お、オレが作ったんじゃないぞ。名前もしらない既に退社ずみの誰かだ。
たしかにそんな文字は滅多に使わないけどね。。。
メールアドレス仕様の深淵を覗き込むのはいくない。
Re: (スコア:0)
バズって儲かるから放置みたいな
example.com/username をやめろ (スコア:1)
(Qiitaではユーザー名の縛りで不可能だけど)「.well-known」というユーザー名を取得されてしまうとセキュリティ的にマズいことになるので、そもそものURL設計が危なっかしい。
/.well-known/はRFC 8615 [ietf.org]で定められたWell-known URI [wikipedia.org]なので、この階層にユーザーが任意のファイルをアップロードできるとサーバ証明書を不正に発行できてしまう。
チルダでもアットマークでも別な階層を挟むでもいいから、ユーザー名をそのままドメイン直下にマッピングするのはやめた方がいい。
Re: (スコア:0)
最近「~」があまり使われないのはなんでなんだろう
Re: (スコア:0)
チルダは、昔風のUNIXサーバの共用レンタルサーバ時代の名残でしょう
UNIXのアクセス管理・ディレクトリ構造をそのまま流用した感じの
いまは、独自システムでそういったのを利用しないサービスだったり、
そもそも仮想PCベースのレンタルサーバが当たり前になったし
Re: (スコア:0)
共有サーバー時代でも、~は%7EにURLエンコードされちゃう(当時のRFC的は~は直NGだったので正しい)のでユーザーに優しくないとか、
HTTP1.1クライアント未満が滅んで、名前ベースのバーチャルホストが当たり前に使えるようになり、
共有レンタルサーバーでもサブドメインで分けるようになったとかも廃れた理由に有りそう。
Re: (スコア:0)
見た目も名前もチン毛みたいだからじゃね?
めんどくさいので垢消したから今はどうなのかしらんが (スコア:1)
3年ぐらい前だと非公開記事(URL共有による閲覧のみ)がある場合にユーザ認証による制限が行われていません
なので、シジルとして@が使われる言語RubyやPerl等がある場合に
Qiita上のメンションと区別がされていなませんでした
例えばですが書かれた非公開記事の中に「@test」って文字列があると
Qiita上の@testさんに通知メールが送られてきてURLが入っているので非公開記事が見ることが出来るという素敵な仕様でした
今はなおったのかなぁ?
Re: (スコア:0)
Qiitaって深く考えずちゃちゃちゃっと記事を書いて公開するサイト。
運営もちゃちゃちゃっと書きあげて作ったんだろうね。
Re: (スコア:0)
Qiitaの非公開って、一覧に出ないってだけの意味だぞ
GitHubは偉い (スコア:1)
GitHubもユーザー名はドメイン直下。
でもsponsorsとかactionsとかサービス開始当初に想定できなさそうな名前がきちんと空いていて偉いと思った。
交渉したか無理やりで取り上げたのかもしれないけど、wayback machineでは確認できず。
適当な名前で試して今後予定しているサービスを検討するのも良いかも。基礎的な単語網羅してそうだが。
Re: (スコア:0)
偉いのか、それ。
ユーザーが入力した文字列をそのままURLのパスに使うのが本当に偉いのか。
昔はパスでなくクエリ文字列で扱ったから平気だったんだろうけどねぇ。
Re: (スコア:0)
ユーザーが入力した文字列をそのままURLのパスに使うのが本当に偉いのか。
スラドの悪口はやめてさしあげろ。https://srad.jp/~ユーザー名 がそのまま使われてるよ。
(例)https://srad.jp/~Oliver
Re: (スコア:0)
その ~ が大事だって話でしょ
Re: (スコア:0)
自分ならそんな設計はしないけど、それを完全に管理できるなら流石とは思う。
404で試してみた (スコア:0)
> ユーザ名 404 はすでに存在します。
一方 https://qiita.com/404 [qiita.com] にアクセスすると
> お探しのページは見つかりません。
> 404: Not Found
Re: (スコア:0)
418はteapotさんがおられました
451 (スコア:0)
Unavailable For Legal Reasons
# https://qiita.com/Ghosn [qiita.com]にアクセスするとhttps://qiita.com/410にリダイレクトされることはなかった
どういう構造なんだろう (スコア:0)
ユーザー名:wp-config.php
とかしたらサイトの管理画面通ちゃったりするのだろうか
まさかなぁ
Re:どういう構造なんだろう (スコア:1)
単純にエラー用のhtmlとマイページのurlが重複しちゃってるだけ。
https://qiita.com/xxx [qiita.com]
という形をマイページurlにしたらそういう重複はすぐに起きる。
マイページとエラーページのどちらの表示優先順位が上かwebサーバーの表示設定によりけり。
wp-config.phpの場合は、最初から(ユーザー名を誰も取ってないときから)誰でも管理画面にアクセスできるのが一般的(管理画面で管理者のパスワードを要求されるのが一般的だから設定を誰でもいじれるわけではない)。
誰かがユーザー名を取った場合は、
設定画面の表示優先順位が上ならマイページを開けないし(誰でも管理画面にアクセスできる)
マイページの優先順位が上なら管理画面が開かなくなる(管理者すら管理画面にアクセスできない)。
#今回のトラブルだとユーザー名index.htmlみたいなのも問題起きる可能性あるね
nullさんとかfalseさんとか (スコア:0)
予約語と重なるような名前は避けたほうがいいのかなあ。
日本にも「匿名」さんとか「某」さんとかが絶対いないとは言い切れないけど・・・こっちはエラーは起きなさそう(テストデータと間違えられる可能性はあるが)
Re:nullさんとかfalseさんとか (スコア:2, おもしろおかしい)
別の意味でvoidさんも避けたほうがいい
Re:nullさんとかfalseさんとか (スコア:1)
別の意味ってなんの話しですか?
Re: (スコア:0)
void fj で検索してみそ。
Re: (スコア:0)
そこは「“話し”ってなんですか」だぞ
Re: (スコア:0)
懐かしいわな
Re: (スコア:0)
スラドでは大丈夫そう [srad.jp]
Re: (スコア:0)
ユーザー名は基本文字列だろうから null でも false でも問題ないと思うけど
今回のは500とか404とかが予約語に入ってなかったってのが原因か。
自分なら /error/ にまとめてその後に500とかつけるけど。
漏れとかいろいろリスクあるから、できるだけ少なく済むようにした方がいい。
もしくは、文字数制限で1文字ユーザー名を取れなくすれば、自分で1文字なら使い放題。
Re:nullさんとかfalseさんとか (スコア:2, すばらしい洞察)
Re:nullさんとかfalseさんとか (スコア:1)
そしてerrorさんが排除されると。
表示されるメッセージはこれで
「えっちなのはいけないと思います」
# え、えろちゃうわ!
Re: (スコア:0)
我がRuntimeException軍は永久に不滅です
Re: (スコア:0)
conconconさんとかはもう大丈夫だろうか
# オスマンさんは関係ない
Re: (スコア:0)
>「某」さん
ぢたま某さんとか
Re: (スコア:0)
↑表示できるかな? (U+20DD Combining Enclosing Circle)
Re: (スコア:0)
logoutさんも忘れるな
https://twitter.com/hamachiya2/status/25194317461 [twitter.com]
Re: (スコア:0)
日本にも、Ubuntuで須藤さんがsudoというユーザーを作ろうとして不具合に遭遇したという話がある。sudoコマンドが使うsudoグループとかぶっちゃったという問題。
Ubuntu日本語フォーラム / インストール時のユーザー名による不具合 [ubuntulinux.jp]
バグが「起きる」… (スコア:0)
なんというか残念。
Re: (スコア:0)
Wake Up, The プロジェクト 燃えあがれ
光と闇の果てしないバトル
Wake Up, The プロジェクト 退行よ
人に時間を与えてくれ
Re: (スコア:0)
BLACK企業っぽい
893 (スコア:0)
はやめておこう
#801とかも
Re:893 (スコア:2)
Re: (スコア:0)
573とか417とかなら?
今時分は567ですかね
Re: (スコア:0)
ほい
https://qiita.com/893 [qiita.com]
801はまだない
Re: (スコア:0)
鉄ヲタ的には3桁の数字は色々とネタになる
……が、あまり引っかかるのはないか。101・103、201・203・205・207……あとは415あたりか、ステータスコードとの重複は。
# 475とか381が好き
# 新しいのだと221とか811とか
Re: (スコア:0)
私、プライベートIPアドレスの最後のオクテットには192.168.0.101, 192.168.0.103など使っています。0~99はDHCP用という棲み分けができてちょうどいい。短所は交流・交直流形をまったく採用できないところ。
Re: (スコア:0)
0721