アカウント名:
パスワード:
C言語系の言語だと NUL (\x00) を文字列の終了とみなして勝手に処理を打ち切るとか色々問題起こるので、NULLバイトとかASCIIの制御文字はバリエーションで弾くのが常識だと思ってたけど、いまだにこんなレベルの低い脆弱性が主要MUAにあったとは驚き。
今はどうだか知らんが、10年ぐらい前はphpでもC言語系の非バイナリセーフ関数が入り乱れてて ereg() ですらNUL文字以降が無視されたからバリエーション回避に悪用されたし、ディレクトリトラバーサルもやり放題だったから、入力値は受け取った時点で \x00 が含まれていないことをバイナリセーフ関数で確認するのが常
何のバリエーションなのかと思ったらひょっとしてバリデーションですかね…
NULなんて言語(ライブラリ)で面倒見るべきってのはいうてもまぁ妥当なんじゃないかな…「プログラマが注意深くなければ間違う」なんて命令自体がおかしいのよやっぱ
IMEで「バリ」と打った時の予測候補を信頼したら、文脈上誤った文字列がスラド投稿フォームにインジェクションされてしまったようです。IMEの飼い主としてお詫びします。
NULなんて言語(ライブラリ)で面倒見るべきってのはいうてもまぁ妥当なんじゃないかな…
使おうとする関数がバイナリセーフかを確認するのはプログラマーの責任だと思います。それが面倒なら、すべての関数がバイナリセーフである言語やライブラリを使うべきでしょう。
> 使おうとする関数がバイナリセーフかを確認するのはプログラマーの責任だと思います。それが面倒なら、すべての関数がバイナリセーフである言語やライブラリを使うべきでしょう。
「プログラマの責任だからやるべきだ」てのはまぁわかりますが、「やるべきだからやるのだ」が通らないだけの量、これはコードの量であったり、必要なプログラマの数であったり、になってんじゃないですかねと言う感じです
ベテランプロが知り尽くした言語で戦ってれば安全率は高いでしょうが、トータルの生産量が膨大なら結局ミスは出ます。
「考えるのが面倒だからそういう言語は使わない」ではなく「考えるのが面倒なそういう言語は撲滅すべき」なんかなと思います。
答えがある話じゃないですけどね…
「C言語」とかそれに類する低級言語を安全に使うには、ベテランプロである必要があるんです言語を知り尽くさないと安全に使えないけど、その代わりにマシン後に近くて高速なんです
それができないなら高級言語使っててください
低級言語の世界を知らない人向けにたとえ話をしましょうか?
言語仕様を知り尽くしていない人がWebアプリでSQL使うなら、SQLインジェクションを防ぐためにプレースホルダを使うべきですパフォーマンスが悪いのは我慢してAWSに課金して回避してください
高速化やクエリキャッシュ最適化などを目的としてプレースホルダを使わずに独自のエスケープ処理をしたいのなら言語仕様を知り尽くして絶対に穴がないようにしてください
それだけのことです
別に数年単位の話じゃなくて方向性の話ですがね、究極のとこアセンブラだのC言語なんてのは人間が使うのは止めれば良いんですよ
高速だのなんだのはすべて広義のコンパイラが解決すればいい話ですやって出来ない、そんなこと出来る日が来ない、そんな問題でも無いのにCを引きずるなんて必要は無いでしょ低級言語なんてのは博物館と研究所にあれば十分だと思います
現状の問題は「言語仕様を知り尽くし」てなくても生SQLが発行出来る言語がゴロゴロしてること、そのためそんな言語が新規開発に選ばれることだとおもいますね
言語を開発している人数とその質、言語を使う側の人数とその人数の多さから来る相対的に低くなる質を考えたとき、「コードを書く側がしっかりしてりゃ良い」という言説にはうーん、与しかねます
そんなに低級言語が必要ですか?login.cの話とか思い出すとCなんてとっくの昔に十二分に高級化しててブラックボックス触ってるも同然だと思いますけど
一応書いときますとCメインで組み込みもやってますよぼくは高速化のためにアセンブリいじることも度々ですでも新しい言語やライブラリを使うときにゼロ終端文字列について考えたくないし、考えさせるべきで無いと思ってます
若者はもっと目的だけを考えていて欲しいのです
なるほど素晴らしい理念だと思います
確かに言語側を改善してプログラマが楽できた方が良いですね
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
Mozilla Thunderbird は MTA が悪いから対策する気がないと表明 (スコア:0)
C言語系の言語だと NUL (\x00) を文字列の終了とみなして勝手に処理を打ち切るとか色々問題起こるので、NULLバイトとかASCIIの制御文字はバリエーションで弾くのが常識だと思ってたけど、いまだにこんなレベルの低い脆弱性が主要MUAにあったとは驚き。
今はどうだか知らんが、10年ぐらい前はphpでもC言語系の非バイナリセーフ関数が入り乱れてて ereg() ですらNUL文字以降が無視されたからバリエーション回避に悪用されたし、ディレクトリトラバーサルもやり放題だったから、入力値は受け取った時点で \x00 が含まれていないことをバイナリセーフ関数で確認するのが常
Re: (スコア:2)
何のバリエーションなのかと思ったらひょっとしてバリデーションですかね…
NULなんて言語(ライブラリ)で面倒見るべきってのは
いうてもまぁ妥当なんじゃないかな…
「プログラマが注意深くなければ間違う」なんて命令自体がおかしいのよやっぱ
Re: (スコア:1)
IMEで「バリ」と打った時の予測候補を信頼したら、文脈上誤った文字列がスラド投稿フォームにインジェクションされてしまったようです。IMEの飼い主としてお詫びします。
使おうとする関数がバイナリセーフかを確認するのはプログラマーの責任だと思います。それが面倒なら、すべての関数がバイナリセーフである言語やライブラリを使うべきでしょう。
Re: (スコア:3)
> 使おうとする関数がバイナリセーフかを確認するのはプログラマーの責任だと思います。それが面倒なら、すべての関数がバイナリセーフである言語やライブラリを使うべきでしょう。
「プログラマの責任だからやるべきだ」
てのはまぁわかりますが、
「やるべきだからやるのだ」が通らないだけの量、
これはコードの量であったり、必要なプログラマの数であったり、
になってんじゃないですかねと言う感じです
ベテランプロが知り尽くした言語で戦ってれば安全率は高いでしょうが、
トータルの生産量が膨大なら結局ミスは出ます。
「考えるのが面倒だからそういう言語は使わない」ではなく
「考えるのが面倒なそういう言語は撲滅すべき」なんかなと思います。
答えがある話じゃないですけどね…
Re: (スコア:0)
「C言語」とかそれに類する低級言語を安全に使うには、ベテランプロである必要があるんです
言語を知り尽くさないと安全に使えないけど、その代わりにマシン後に近くて高速なんです
それができないなら高級言語使っててください
低級言語の世界を知らない人向けにたとえ話をしましょうか?
言語仕様を知り尽くしていない人がWebアプリでSQL使うなら、SQLインジェクションを防ぐためにプレースホルダを使うべきです
パフォーマンスが悪いのは我慢してAWSに課金して回避してください
高速化やクエリキャッシュ最適化などを目的としてプレースホルダを使わずに独自のエスケープ処理をしたいのなら
言語仕様を知り尽くして絶対に穴がないようにしてください
それだけのことです
Re:Mozilla Thunderbird は MTA が悪いから対策する気がないと表明 (スコア:2)
別に数年単位の話じゃなくて方向性の話ですがね、
究極のとこアセンブラだのC言語なんてのは人間が使うのは止めれば良いんですよ
高速だのなんだのはすべて広義のコンパイラが解決すればいい話です
やって出来ない、そんなこと出来る日が来ない、
そんな問題でも無いのにCを引きずるなんて必要は無いでしょ
低級言語なんてのは博物館と研究所にあれば十分だと思います
現状の問題は「言語仕様を知り尽くし」てなくても生SQLが発行出来る言語がゴロゴロしてること、
そのためそんな言語が新規開発に選ばれることだとおもいますね
言語を開発している人数とその質、言語を使う側の人数とその人数の多さから来る相対的に低くなる質を考えたとき、
「コードを書く側がしっかりしてりゃ良い」という言説にはうーん、与しかねます
そんなに低級言語が必要ですか?
login.cの話とか思い出すとCなんてとっくの昔に
十二分に高級化しててブラックボックス触ってるも同然だと思いますけど
一応書いときますとCメインで組み込みもやってますよぼくは
高速化のためにアセンブリいじることも度々です
でも新しい言語やライブラリを使うときにゼロ終端文字列について考えたくないし、考えさせるべきで無いと思ってます
若者はもっと目的だけを考えていて欲しいのです
Re: (スコア:0)
なるほど
素晴らしい理念だと思います
確かに言語側を改善してプログラマが楽できた方が良いですね