アカウント名:
パスワード:
二十年ぐらい前からSQLインジェクションやhtmlでのscripインジェクションなどが話題になってて入力文字列をそのままシステムで扱うのは禁止って初歩的な常識ができている。それなのにいまだにたびたびこういう問題が、しかも大企業のシステムで出てくるのは不思議でならない。わざと穴を作っていつでも侵入できるようにしてるとか陰謀論を考えたくなる。
型指定とか暗黙の型変換とかプログラム言語的な問題でしょ。
'true' という文字列だけを true に変換してしまうならそうかもだけど、暗黙の型変換のある言語でも大抵は、空文字列 => false, 空でない文字列 => trueの変換じゃない? そう考えると原因は違うところにあるような気がする。
Perlだと、空文字列、文字列の「0」、数値の「0」は「偽」と扱われる。なので、入力がなかったらエラーにしようと思ってif (!$param{"Nickname"}) { &error("ニックネームがありません。") }などとやると「0」を入力すると、入力があるのに、無い旨のエラーメッセージが表示されるというバグを作り込むことになる。
ただ、昔から知られたバグだけどね。
そういう誤った処理を防ぐために標準で汚染チェックモードを備えていて外部由来の入力文字列からは正規表現を使って取り出されるべき値を取り出せ!
っていう言語仕様なってるのに
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
どうしてこんな問題が起きるんだろう (スコア:0)
二十年ぐらい前からSQLインジェクションやhtmlでのscripインジェクションなどが話題になってて入力文字列をそのままシステムで扱うのは禁止って初歩的な常識ができている。
それなのにいまだにたびたびこういう問題が、しかも大企業のシステムで出てくるのは不思議でならない。
わざと穴を作っていつでも侵入できるようにしてるとか陰謀論を考えたくなる。
Re: (スコア:0)
型指定とか暗黙の型変換とかプログラム言語的な問題でしょ。
Re: (スコア:0)
'true' という文字列だけを true に変換してしまうならそうかもだけど、
暗黙の型変換のある言語でも大抵は、空文字列 => false, 空でない文字列 => true
の変換じゃない? そう考えると原因は違うところにあるような気がする。
Re: (スコア:0)
Perlだと、空文字列、文字列の「0」、数値の「0」は「偽」と扱われる。
なので、入力がなかったらエラーにしようと思って
if (!$param{"Nickname"}) { &error("ニックネームがありません。") }
などとやると「0」を入力すると、入力があるのに、無い旨のエラーメッセージが表示されるというバグを作り込むことになる。
ただ、昔から知られたバグだけどね。
Re:どうしてこんな問題が起きるんだろう (スコア:0)
そういう誤った処理を防ぐために標準で汚染チェックモードを備えていて
外部由来の入力文字列からは正規表現を使って取り出されるべき値を取り出せ!
っていう言語仕様なってるのに