明らかに、サーバー側ですべてのユーザー入力データを検証する必要があります。「適切な」入力検証と見なされるものと、それを実行する順序に興味があります。
現在(および過去の最近のプロジェクト)の時点で、私は次のようにしています:
ユーザー入力を取得し、オブジェクトをインスタンス化し、メソッドを呼び出します。
if(isset($_POST['addCat'])) {
    $db = new DBConnection;
    $categories = new Category($db);
    if($categories->insert_cat($_POST['name']) === TRUE) {
        echo "Category Inserted Successfully!";
    }
}
インスタンス化されたオブジェクトから呼び出されるメソッド: 
1. ユーザー入力をエスケープする
2. data_validation オブジェクトをインスタンス化する (以下の検証オブジェクトを参照)
class Categories {
    public function insert_cat($catName) {
        $catName = $this->mysqli->real_escape_string($catName);
        $validate = new data_validation;
        if(!($validate->validate_string($catName))) {
            echo "Invalid characters found in category name";
            die();
        }
        $query = $this->mysqli->query("INSERT INTO categories(name) VALUES ('".$catName."')");
        if($query === false) {
            printf("Error: %s\n", $this->mysqli->error);
            die();
        } else {
            return true;
        }
    }
}
data_validation クラス: 
1. データをトリミングします
2. データを正規表現に一致させます
3. データベース挿入のためにデータを insert_cat メソッドに返します
class data_validation {
    public function validate_string($data) {
        // Remove excess whitespace
        $data = trim($data);
        if ( preg_match("/^[0-9A-Za-z \.\-\'\"]+$/", $data) ) {
            return true;
        } else {
            //return 'Not a valid string';
            return false;
        }
    }
}
つまり、基本的に私の質問は次のとおりです。最初にデータをエスケープしてからトリミングし、次に正規表現と比較してから、htmlentites()またはそのようなものを追加してフォーマットを保持するのは適切ですか、それとも別の順序で行う必要がありますか?
セキュリティの習慣を改善するためのヒントは大歓迎です!