0

重複の可能性:
PHP で SQL インジェクションを防ぐ最善の方法は?

私はニュース サイトを作成しており、セキュリティを実現するために必要なもののリストを書き留めています。

ユーザー + サイトの相互作用

  1. すべての POST/GET 関数を html-entities と mysql_real_escape_string でサニタイズします
  2. サイトがオンラインになろうとしている場合は、オフにするか、エラーを報告するか、カスタマイズします
  3. Cookie は使用せず、セッションのみを使用します (セッションは脆弱性が低いため)
  4. ディレクトリ リストをオフにする
  5. 不要なファイルのインデックス作成を防ぐために robot.txt を作成します
  6. パスワードには、salt + Md5 を使用します
  7. IP を取得して 1 台の PC と 1 つのブラウザーから ADMIN サイトにアクセスできるようにし、情報を参照します。それ以外の場合は 404 エラーがスローされます。

私は自分のサイトにそれらすべてを実装しました。サニタイズには PDO / Msqli を使用すると言う人が多いと思いますが、私は PHP の初心者であり、PDO/Mysqli または OOP を学ぶのは難しいです。

だから、あなたが提供できる他のものは何でも素晴らしいでしょう. ありがとう。

4

4 に答える 4

2

--> すべての POST/GET 関数を html-entities と mysql_real_escape_string でサニタイズします

なぜhtmlエンティティ?html 形式で情報を表示するためだけに必要です。情報を受信して​​保存している間は使用しないでください。

また: mysql_real_escape_string はテキストに対してのみ機能します。たとえば、整数を受け取りたい場合は、次のようにします。

$myInt = (int)$_POST["whatever"];

--> サイトがオンラインになろうとしている場合は、オフにするか、エラーを報告するか、カスタマイズしてください

はい、ログ ファイルを使用してそれらを保存し、定期的に調べてください。

--> Cookie は使用せず、セッションのみを使用します (セッションは脆弱性が低いため)

Cookie なしで PHPSESSID を中継するにはどうすればよいですか? URLにないことを願っています。私はあなたが意味したと思います: 私は PHPSESSID を保存するために Cookie のみを使用します。

セキュリティの向上: リクエストごとに新しいセッション ID を作成します。

--> ディレクトリ リストを無効にする

良い。

--> 不要なファイルのインデックス作成を防ぐために robot.txt を作成します

わかりましたが、とにかく機密ファイルを webroot に置くべきではありません (例: db 資格情報)

--> パスワードには、salt + Md5 を使用します

md5は弱いです。一方向暗号化の他の方法を検討することをお勧めします。

--> IP を取得して 1 台の PC と 1 つのブラウザーからのみ ADMIN サイトにアクセスできるようにし、情報を参照します。それ以外の場合は 404 エラーがスローされます。

それはいいアイデアです。

追加するものは他にもたくさんあります。ほとんどはあなたの論理に関係しています。

例: userid を持つユーザーと、postingid を持つ投稿があるとします。投稿を tblpostings に保存し、ユーザー ID も保存して、誰が投稿したかがわかるようにします。ここで、投稿の削除を有効にする場合は、投稿を削除した人が所有者でもあることを何らかの方法で確認する必要があります。この種のことは、単純な一般規則に適合させるのが難しい. コードを書くときは注意してください。:-)

于 2012-10-03T10:54:25.010 に答える
1

robots.txtファイルは、ロボットが特定のビットをインデックスに登録するのを阻止することになっているので注意しますが、サイトの一部を見てほしくないことも伝えます。

厳密には、PHPとXSSですが、サーバーがLinux上にある場合は、root sshアカウントを無効にして、別のアカウントを使用してください。データベース固有のユーザーがいるため、1人が危険にさらされても、他のデータベースは危険にさらされません。

于 2012-10-03T10:50:15.867 に答える
1

「パスワードは、salt + Md5 を使用してください」

クリア テキストよりも優れていますが、現在最もよく知られているアルゴリズムは bcrypt であり、ここで説明します。

PHPでパスワードをハッシュするためにbcryptをどのように使用しますか?

于 2012-10-03T10:59:26.990 に答える
0

SQLInjection mysql_real_escape_stringの使用を停止し、プリペアドステートメント/パラメーター化されたクエリの使用を開始します。今すぐPDOを学びましょう。それほど難しくはなく、最初から物事を正しく行うのに役立ちます。

XSS出力でのコンテキストエスケープを調べます。OWASPXSS防止に関するチートシートを参照してください。

ログイン時に新しいセッションを発行します。そのセッションをhttp経由でリークしないでください。ログインしたユーザーにはhttpsを使用し、セッションCookieにセキュアフラグとhttpOnlyフラグを設定します。

パスワードのハッシュには、bcrypt、scrypt、またはpbkdf2を使用します。

他の人が言ったように、保護されていないサーバーに機密ファイルを置かないでください。Robots.txtは、ハッカーが始めるのに適した場所です。

于 2012-10-04T05:39:15.430 に答える