仕事で「/*com*/」と「/**com/」でSQLインジェクションの検証をしているが、JSONパーサに惑わされて紛らわしいときがある。
どのJSONパーサがコメントっぽい文字を解釈するのか気分のまま確かめてみる。
個人的な興味での調べごとなので、「~までやるべき」や「〇〇が足りない」、「〇〇のところが違うからダメ」とかは受け入れない。
前提
「/*com*/」 →この形式のコメントを許容するなら正常応答になる
「/**com/」 →上記を許容するならエラー応答になる
検証パターンは以下でやる。
【数値型】
- /*com*/
- /**com/
- /com**/
ASP.net
System.Text.Json
サーバ側コード

通常

「/*com*/」→エラー

「/**com/」→エラー

「/com**/」→エラー

Newtonsoft.Json
サーバ側コード


通常

「/*com*/」→正常

「/**com/」→エラー

「/com**/」→エラー

エラー時のメッセージが違う。。。
おまけ
「//」→エラー

「//aaaa」→正常

Java
gson
サーバ側コード

通常

「/*com*/」→正常

「/**com/」→エラー

「/com**/」→エラー

PHP
json_decode
サーバ側コード

正常

「/*com*/」→エラー

「/**com/」→エラー

「/com**/」→エラー

疲れたし省略
- Rubyのjsonパーサ
- pythonのjsonパーサ
- javaの他のjsonパーサ
結果
「/*com*/」→正常
「/**com/」→エラー
となるjsonパーサはあった。
上記にならず一律エラーになるjsonパーサもあった。
感想
仕事で気になっていたことを明確にできてよかった。
他にもjsonパーサはあったし言語も網羅できてないけど、そもそもこの現象はjsonパーサで起きるかという観点だったので別に網羅しなくてもいいなかと思った。
とりあえずこういった挙動するjsonパーサがあるということで大きな収穫。
検証は面白かったけどいろんな環境や言語でWebアプリを動かすのはまぁまぁ疲れた。。。
コメント