回答編集履歴

1

追記: データベース

2023/09/14 03:58

投稿

ikedas
ikedas

スコア4357

test CHANGED
@@ -16,3 +16,6 @@
16
16
  常に上のようなセットで入出力の処理をすることで、**コンピュータ上のデータ**、**媒体上のバイトの並び**、そしてその間の**シリアライズ/デシリアライズ処理**、といったものがそれぞれ明確に区別され、エスケープ処理の漏れを心配する必要はなくなります。一方、「echoで出力する時点」のような「点」でエスケープの適否を論じる限り、処理漏れへの懸念はなくならないのではないでしょうか。
17
17
 
18
18
  具体的な方式としては、データをシリアライズするためのメソッドなりユーティリティ関数なりを用意してデータを出力する際は必ずそれを通して得た結果を出力する、といったことをするといいと思います。長い。
19
+
20
+ ---
21
+ [回答後追記] データベースサーバへの問い合わせと結果の取得についても、エスケープ処理が適切に行われないとSQLインジェクションのような脆弱性の原因となりますから、上で述べたのと同様の考慮が必要と言えます。しかしデータベースアクセスではほとんどの場合にクライアントAPIを通じてシリアライズ/デシリアライズ処理が暗黙に行われるため、適切な方法を用いればまず問題にならないです。ご質問の例のようにパラメタ化クエリとバインド変数を使うとか、自前でSQL文を書く代わりにORマッパを使うとか。