2010-12-30 4 views
2

セキュリティを最大限に高めるためにPHPとMySqlを使用する人はどのようなことに焦点を当てるべきですか?私が行っているPHPセキュリティチェックリスト(注射、セッションなど)

物事:
は私のテーブル名
-50character塩+ RIPEMDパスワード

相続人は私の前にEMに
-Placedランダムアルファ数字を脱出した後、-validate、すべての入力
すべての入力を-mysql_real_escape_string私が眠っていると思う:
- 私はセッションについては何も知らず、それらを確保しています。

session_start(); 
$_SESSION['login']= $login; 

とでそれを確認する:あなたがやっているすべてがある場合、それはどのように危険な/安全である

session_start(); 
if(isset($_SESSION['login'])){ 

-Iは、クロスサイトインジェクション、何ではないような注入の他の形態について何かを聞きました.. - おそらく私が知りたくない他の多くのもの。

phpを安全にするための「チェックリスト」/ Quicktutはありますか?私は心配すべきことを知っていません。私はプロではないので、ケーキを造っていないのは残念です。

答えて

0

ハッキングの複数の方法があります。最初は、実際の(または偽の)ユーザーがあなたのソフトウェアを傷つけてサーバーを傷つけようとしているときです。 SQLインジェクションがこの問題を回避するのを防ぐために、エスケープと入力チェックが必要です。

other(または 'an')は、別のユーザーを偽装するためにセッションを盗もうとするハッカーです。これにより、資格のないデータにアクセス(および変更)することができます。

mysql_real_escape_stringを使用してSQLインジェクションを修正しました。それを使用して正しく使用すると、SQLインジェクションを恐れる必要はありません。テーブル名にランダムな文字を追加する必要はありません。これにより、実際の追加の安全性を提供しないうちにプログラミングが困難になります。 mysqliとパラメータ化されたクエリを使用することもできますが、これにはまったく問題がありません。 mysqliはあなたのためにエスケープします。理論的には、クエリをより効率的にキャッシュすることができるため、パラメータ化されたクエリがさらに高速に実行される可能性があります。しかし、実際にはそうではありません。 MySQL 5.2以降では、これらのクエリはまったくキャッシュされていますが、効率的ではありません。しかし、今は心配することはありません。どんなソリューションでも、あなたのために十分なパフォーマンスを発揮します。

あなたがしてはならないことの1つは、ユーザー生成コンテンツにPHPコードを許可していることです。ユーザーがPHPを入力できるようにすると、アプリケーションが中断され、データベースが変更される可能性があります。また、ハッカーがユーザー/コンテンツエディタを偽装した場合、コンテンツにPHPが含まれるようにすると、完全なツールボックスを無料で入手できます。

セッションがハイジャックされるのを防ぐため、SSLを使用するのが最善の方法だと思います。 SSLを使用してすべてのページをサーバーに入れたくない場合は、セッションをCookieに保存することを選択できますが、重要な変更が行われるたびに(SSLを使用して)再ログインを要求します。

+0

ねえ。丁寧な対応に感謝します。 mysql_real_escape_stringの質問が早く出てきました。マニュアルを見てみると、特定の種類の注射でしか機能しないことが示唆されたように感じました。すべての入力にそれを使用すれば、注射から安全ですか?また、私はそれを得るまで、ssl temporairlyを使用する代わりのソリューションはありますか? – NoviceCoding

+0

これは、クエリで入力値を使用する状況でSQLインジェクションを行う場合に機能します。あなたが何かを検索できるようにして、誰かが$ searchに値を入力させるようにすると、 '$ query ="のようなクエリを作ることができます。SELECT * FROMページWHERE content LIKE '%$ search%' ";'誰かが '牛% 'を検索しない限り。ドロップデータベース。 - '。そう思わないでしょうか?たぶん、そうではありません。とにかく、それは悪意のあるハックのようなものです。誰かが単に ''を含むものを検索したときに起こりうる単純な問題を除けば。 :) – GolezTrol

+0

SSLの代替手段として、私はこれで最大の専門家ではないので、私はあなたに全く利益をもたらさないかもしれないばかげたアイデアでこの質問に答えることができない場合があります。 SQLインジェクションとは全く別の問題であるため、これについて新しい質問をすることを検討することさえできます。 – GolezTrol

2

ユーザーエージェントをテストすることで、ハイジャックを避けることができます。そのような

何か:

if (isset($_SESSION['userAgent'])) { 
    if ($_SESSION['userAgent'] != md5($_SERVER['HTTP_USER_AGENT'])) { 
     // HACK !!! 
     // Kill the process or ask for authenticating 
    } 
} 
else { 
    $_SESSION['userAgent'] = md5($_SERVER['HTTP_USER_AGENT']); 
} 
+0

これはあなたのセッションをhyjackingから深刻なハッカーを停止することはありません。 – GolezTrol

+0

ゴレズ、それから何ができますか? – NoviceCoding

+2

これを見て始めてください:http://stackoverflow.com/questions/328/php-session-security UserAgentのチェックもそこに書かれていますが、コメントで分かるように、私だけではありませんそれは役に立たないチェックだと思う人。チェックが失敗した場合、あなたは非常にばかげたハッカーと対処していると言えます。 – GolezTrol

1

アプリケーションであらゆる種類のコンテンツを投稿できる場合は、ログイン時に何らかの種類の暗号化を使用する必要があります。 SSLはもちろん最善ですが、ログインフォームを投稿する前にJSでパスワードを暗号化している人は苦労しています。

セッションハイジャックを避けるには、ログイン時にipにセッションを結びます(ログイン時にipを保存し、すべてのリクエストと比較してください)。キーセキュリティは、すべてあなたがHTMLに貼り付けるoutputs.EverythingをエスケープされXSSと主にHTMLある他の注射の種類、およびjsの注射のために

に関して、 //トン

1

は、HTMLのためにエスケープする必要があり、なしを意味していますjsまたはHTMLは、データベースから直接送られたものによって生成されたコンテンツ内のブラウザによって表示される必要があります。

user_nameの例として、フォームに設定されたユーザーにHTMLまたはjsコードを含めないでください。何らかの方法で誰かがそのようなものを注入した場合、いくつかの問題が発生します(最も簡単な方法は、ほとんどのアプリで検索フォームの入力です。検索は応答ページに表示されます)。したがって、すべてのtheses出力は出力前にhtmlspecialchars()を持つ必要があります。

はここにいくつかの有用なリンクです: