JSONデータへの防御対策


  • while( 1 ); をJSONの前に配置
  • POSTのみ受け入れる

とある文字コードネタのPDF資料を読んでいたら上のような記述が。防御方法の解説だと思うのですが、おそらくOR条件。文脈ではJSONデータに変なものが入ってきてそのせいで悪さができてしまうことを防止しようとするものだと思うのですけれど、その文脈であっているのかしらん?資料の文脈の読み間違いかもしれないけれど。受動的攻撃によるクロスドメインでのデータ漏洩を防止したいのかしらん? 文字コードネタでいえば、不正な符号によるデータがJSONデータの中にはいってきているものと考え正規なユーザがそのJSONデータをブラウザ上で取り扱うときに悪意あるJavaScriptスクリプトが動いてしまえば駄目だよ、だから防衛しましょうねと。JSONのハイジャックってこんな感じでしたかしら。

それなら、資料の意図としては、防衛方法の最初のwhileのほうは、JavaScriptの悪意あるスクリプトが作動しようにも永久ループ発生になるので成功しませんよ、ということに。2番目のPOSTのほうは、そもそも、GETで取得しなければいきなりスクリプトが動かないので大丈夫だろうと。データはゆっくり切ったり張ったりしてねと。

さて。whileによる防衛方法なのですが、サーバ側のデータ記述実装とブラウザの処理系によっては、防衛は無効になることがあります。なので一般論では防衛方法としては使いづらいです。悪意あるスクリプトとやらがそもそも作動しないことを目的として作られちゃったりしていたら、whileさえ作動しないこともありますし、その後別途仕込んである、JSONデータの一部分なりなんなりを拾うこともありえることでしょう。処理系によってはですが。

十分なセッション管理の上でPOSTでのみ取得てきるJSONデータならばよりいっそう安心だと思います。

…私が資料の文脈を誤解しているかもしれませんね。文字コードネタのはずですから。本来。うーむ。