駄目な技術文書の見分け方 その473

ockehgemのブックマークを見ていたところ、6人のユーザに登録された以下の記事があった。

また池田雅一か。顔見知りなのでズバリいくことにする。

この脆弱性の検査方法を説明する前に、SQLインジェクションの仕組みについて説明しよう。

へえ。

終わりの方を見てみると、

対策

 SQLインジェクション対策の基本はXSSと同じく適切なエスケープ処理を行うことだ。最近、開発環境の多くは、Prepared Statementあるいはバインドメカニズムと呼ばれる仕組みが実装されているので、それらを用いることが最も簡単な方法といえる。

 対策に「準備された文」(prepared statement) のことを書いたのは一応評価しよう。しかし、まあ彼はandとorの区別のない文章書いて平気という技術屋にあり得ないレベルなのだ。
 SQLインジェクション対策の場合、(1)エスケープ処理を行うことと、(2)Prepared Statementを用いることは、どちらか一方のみを行うべきで、すなわち「or」の関係だ。両方行う(and)ということは原理的にはありえないが、強引に行ったとするとおかしな結果となってしまう(「'」一文字が「''」として登録されるなど)。
 しかるに、上記の例では二つの文の関係が、andなのかorなのか、あるいは他の関係なのか分からない。
 例えば、以下のような文はどうか?

 XSS対策の基本は適切なエスケープ処理を行うことだ。PHPにはhtmlspecialcharsという関数が実装されているので、それを用いることが最も簡単な方法といえる。

文の骨格はほとんど同じだが、この場合は、(1)一般原則、(2)具体的方法、という関係になっている。また、場合によっては、(1)必須対策、(2)保険的対策、という関係になる場合もあるだろう。
 このように、andとorの区別のない文書は、技術文書としては要注意だ。書いている当人は分かっているのかもしれないが、誤解の原因となることは間違いない。



参考文献(プロの礼儀作法として*1 )

高木浩光@自宅の日記 - 駄目な技術文書の見分け方 その1

ネタですので、失礼の段は平にご容赦を(_ _)