1

プロジェクトを攻撃 (例: SQL インジェクション) から保護するために、クエリ パラメータ pages(*.php?query=value) に以下を使用します。

$id=strip_tags($id);
$id=mysql_real_escape_string($id);    
if(is_numeric($id) && strlen($id)<=3) //id are numbers maximum of 3 digits
  • これとは別に、strip_tags()必要に応じてデータをフィルタリングするために、クライアント(JavaScript)およびサーバー側(php)の検証を使用しています。
  • パスワードは次を使用して暗号化されますbcrypt()
  • すべてのメッセージは暗号化されていますmcrypt_ecb()
  • isset($_SESSION["id"])ページは、ログインしている場合にのみアクセスできます。
  • error_reporting(0);エラーを非表示にします。
  • $_POSTそれ以外の$_REQUEST
  • mysql_real_escape_string();入力ごとに

実際、私のプロジェクトは大学で使用され、バックトラックにより簡単に侵入できるため、セキュリティについて緊張しているため、安全にするために一生懸命努力しています。(私はそれが膨大な質問であることを知っていますが、どんな種類の助けも非常に役に立ちます)しかし、学生として私はそれを安全にするために他に何が欠けているか知りたいですか?

4

3 に答える 3

10

まず:

ペストのように 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 の投稿の多くは、あなたの旅に役立ちます。

ここでいくつかのことを始めましょう:

(これは、これらのリンクのほとんどが議論していることの概要です)

あなたの分野のセキュリティ慣行を読んでください。それは常に進化しています。

フレームワークに興味がある場合は、興味をそそる人気のあるもののいくつかを次に示します。

しかし、いずれにせよ - 幸運を!

于 2013-08-10T00:21:36.257 に答える
3

Web セキュリティ関連の情報については、 OWASP のWeb サイトを確認することをお勧めします (またはOWASPに参加することもできます)。

このOWASP セクションでは、 PHP 関連の情報を提供します。

于 2013-08-10T01:01:52.717 に答える
2

PHP アプリケーションをセキュアにすることは、かなり複雑なプロセスです。アプリケーションを作成するときに考えなければならないことがたくさんありますが、脅威は SQL インジェクションだけではありません。

次の有用な記事を参照することをお勧めします。

システム管理者向けの 25 の PHP セキュリティのベスト プラクティス

PHP アプリケーションを保護するには?

PHP セキュリティチートシート

于 2014-06-18T04:30:15.443 に答える