正しい入力データの条件と出力データのエスケープ処理内容が明確になっていない場合、設計レベルから検討しなおさなければならない。その他にも以下の点について確認を行うことで、より安全なアプリケーションにすることができる。
●エラー処理が適切になされているか?
実行時にデータベースサーバとの通信ができなくなったなどの実行時エラーの処理を実装していない場合、コードの一部などを漏えいしてしまう危険性がある(ファイルの読み書きや、データベースアクセスが常に正常に処理を終了するわけではない)。
また、すべてのエラーケースを詳細設計時に洗い出すことは、多くの場合、大変困難な作業となる。従って、コーディング時にすべてのエラーケースを洗い出し、コードレビューでそれらに対する処理を適切に行っているか確認する必要がある。
さらに、ファイルの読み書き、データベースアクセス処理など、実行時にエラーが発生する個所で、処理の失敗を確実に管理しているかどうかも確認する必要があるだろう。
●ループなどの処理で境界となる条件に間違いはないか?
発見される脆弱性の幾つかは、ループ処理終了条件や、入力データの境界条件のミスに起因している。特にループ処理の終了条件を間違っていると永久にループを繰り返してしまうことがある。境界条件が正しいか確認する必要がある。
●同時に処理が発生した場合にファイルへのアクセスなどに影響が無いか?
発見される脆弱性には、同時にファイル、データベースへの読み書きなどの処理が要求された場合に発生するものがある。これは、ウェブアプリケーションでは、同時に処理が実行されることは無いという仮定のもとに作成されているためだ。
しかし、実際には複数の同じ処理が同時に実行されることがある。ファイルへのアクセスは通常OSによりロックがかかるので問題が発生することはまれだが、たとえばECサイトの注文番号などのように、処理ごと(あるいはユーザーごと)に新しい番号を連番で発行している場合には、適切なロック処理を行っていない場合、同じ番号が別の処理(あるいは別のユーザー)に割り振られることがある。
このように同時に処理が行われるとファイルなどの整合性が取れなくなることが無いかを確認する必要がある。