まず:
ペストのように PHP の MySQL 関数を避ける
代わりに PHP の MySQLi 関数を使用するか、最小限のPDO を使用してください。MySQLi、特に PDO 関数は、セキュリティ面で優れています。ただし、2 つのうち、PDO は準備済みステートメントでより高度な抽象化を提供し、SQL インジェクション攻撃に対する防御を大幅に強化するため、最良の取引です。
PHP アプリケーションのほとんどの SQL ステートメントは、変数入力を使用して SQL ステートメントの結果を決定します。ユーザー提供の入力を安全に SQL ステートメントに渡すには、変数入力を表すパラメーター マーカー (?) または名前付き変数を使用してステートメントを準備します。準備済みステートメントを実行すると、入力値がパラメーター マーカーにバインドされます。データベース エンジンは、各入力値が 1 つのパラメーターとして扱われることを保証し、アプリケーションに対する SQL インジェクション攻撃を防ぎます。PDO::exec() を介して発行されたステートメントと比較すると、データベース管理システムは、ステートメントが後で再発行された場合に再利用できる各準備済みステートメントのアクセス プランを作成するため、パフォーマンス上の利点があります。
また、廃止された古い PHP 関数の一部を使用しないでください。
次に、一般的に、PHP や動的リクエストを作成する言語を使用している場合、それは何らかのレベルでのユーザー入力を意味し、ほとんどの場合、その後のデータベースとの対話を意味します。Web プログラミングのルール 1: いかなる状況下でも決してユーザー入力を信頼しないこと。まったく。セキュリティ上の問題を回避するために、入力したものはすべてクリーンアップして検証する必要があります。これは PHP でネイティブに実行できますが、正直なところ、多くの作業と細部への注意が必要です。もちろん、開発時間が長くなります。
これが学術的な演習や自己訓練を扱うものでない場合は、可能であればフレームワークを使用してみてください。優れたフレームワークがエスケープ処理のオーバーヘッドの一部を処理できるため、後で多くの頭痛の種を回避できる可能性があります。 、検証など。つまり、コマンドを実行してフレームワークなしで独自のコードを作成すると、実装する機能のすべてではないにしても、ほとんどの機能が自動的に実行され、フレームワークの方がうまくいく可能性があります。
さらに、PHP 開発が容易になり、場合によっては楽しくなります。もちろん、すべてのフレームワークが同じように作られているわけではなく、すべてのフレームワークにセキュリティの問題もあります。しかし、これはあなたが心に留めておかなければならないことであり、宗教的に常に情報を得ておく必要があります.
これが学術的な演習または自己学習の演習である場合は、これを読んでください。
PHP フレームワークを使用しない理由は?
トップの StackOverflow PHP の投稿と Programmers.StackExchange の投稿の多くは、あなたの旅に役立ちます。
ここでいくつかのことを始めましょう:
(これは、これらのリンクのほとんどが議論していることの概要です)
あなたの分野のセキュリティ慣行を読んでください。それは常に進化しています。
フレームワークに興味がある場合は、興味をそそる人気のあるもののいくつかを次に示します。
しかし、いずれにせよ - 幸運を!