PHPエンジンの強度を確認します

みなさん、こんにちは。最近、私のニーズに合わせてPHPエンジンを書くというアイデアを思いつきました。いわば、レベルを上げて有用なものを得るためです。 すぐに、私はそれをクラックするのがどれほど簡単かと思いました。 何かをハッキングできることは秘密ではありませんが、問題は、どれだけ問題があり、すべてのハッカーがこれを実行できるかということです。



フォーム



おそらく、プロジェクトで最も一般的な脆弱性は、コメントフォームまたはログインフォームです。 適切なチェックがなければ、このことは価値がありません。

よくある間違いの1つは、取得したすべてを保存することです。

foreach( $_POST as $item ){}
      
      





デバッガーを介してだれでも、大きなハックを与えない場合でも、独自のポイントを追加できますが、それは非常に不快です。



ファイル提出フォーム


私はこの結論に達しました:

エンジンを保護できるのは、ファイルをアップロードするための単一のフォームがない場合、またはファイルが存在し、十分にテストされている場合のみです


私は最初に考えます、それは最も信頼性が高いですが、それらがなければどこにも存在しない場合、いくつかの推奨事項があります。



プロジェクトを作成し、写真のアップロードフォームで何かをする必要があると、コードを見ると、ファイルの種類のチェックでさえ、ファイルのチェックもまったく行われませんでした。 私が最初に考えたのは、「What the x?」 もう少し調べたところ、JSスクリプトがこのフォームを処理することを理解しました。 幸いなことに、これは管理パネルであり、誰もがそこにアクセスできるわけではありませんでした。

だから、結論。 これはできません!

2つの理由があります。

  1. ユーザーがJSを無効にしている可能性があります
  2. ユーザーはデバッガーでJSを変更できます


ファイル、サイズ、タイプ、写真の場合は幅、高さをチェックすることにもっと注意を払ってください。 多くの場合、画像を表示するとき、幅または高さの片側のみをチェックし、一部の賢者が画像を20000x50pxまたはその逆に塗りつぶしたと想像しますが、視界は快適ではありません。



パスワード保存


これは便利なことですが、後でメールや記録をヨーイングしてパスワードを見つける手間を省くことができますが、このコンピュータが「友人」の手に渡った場合にできることを見てみましょう。

彼は少なくとも2つの方法で設定を開き、そこに保存されているパスワードを確認できます。次に、デバッガーを使用して、フィールドタイプをパスワードからテキストに変更します。



SQLインジェクション(SQLインジェクション)





タンク内の人にとっては、これはアドレスバーまたは同じフォームを介した単純なユーザーのSQLコードの導入です。

1つのルールがあります。
ユーザーが送信したものを信頼しないでください


彼を常に覚えているなら、将来の多くの問題からあなたを救うことができます。



パスワードフィールドに「lol 'OR(1 = 1)#」と表示されている場合、ユーザーからの送信内容を確認してください。

これを取り除く最も簡単な方法は、mysql_real_escape_stringを使用することです。この関数はSQLのすべての特殊文字をエスケープし、stripcslashes関数を使用してすべてのスラッシュも削除します。



管理者



多くのサイトでは、管理パネルにアクセスするには、アドレス/ [admin | admin.php | administrator | など]。 多くのオプションはありませんので、適切なオプションを見つけることができますが、生成されたシンボルで管理パネルを使用する場合、心配する必要はありません(例:7NVmE10SaJ.php)。ユーザーが管理者のログインとパスワードのログインページにアクセスすると、サイトのバックエンド部分のすべての秘密を明らかにすることに一歩近づきます。



パスワード


アカウントの損失を防ぐために、ユーザーに自分でパスワードを作成させないでください。ただし、パスワードを与えた場合は、パスワードをできるだけ難しくするように強制してください。 最近から、このバンドルを使用してmd5パスワード($ secret_key。$ Password。$ Salt)を作成し始めました。

私の意見では、これは良い防御策です。 md5ハッシュは、エンジンの設定(コードのどこかにあります)に縫い付けられた秘密鍵、ユーザーパスワードのmd5ハッシュの隣のデータベースに保存されているユーザーパスワードとソルトから構築され、各ユーザーは独自のソルトを持っています。 これにより何が得られますか? 誰かが秘密鍵なしで私たちからデータベースを盗むと、データベースとエンジンの両方を受け取ったとしてもパスワードを受け取らず、パスワードなしでは役に立たなくなり、テラバイトのレインボーテーブルのみを使用します。



phpmyadmin



ここではすべてが管理パネルと同じです。アドレス/ [phpmyadmin | myadmin | pma |など]を入力するだけではphpmyadminにアクセスできません。 もちろん、ルートの使用| 123ログインも禁止されています。



セッション



セッションの最も一般的な使用法は、ユーザー認証をサポートすることですが、セッションの保存も大きなトピックです。 覚えておくべき最初のことは、セッションIDをクリアテキストで保存しないことです。さらに良いことに、データベースに保存します。 また、ハッカーがIPを偽造できないように、スプーフィング防止の方向に目を向けることをお勧めします。



クッキー



ブラウザでデータを保存するにはCookieが必要です。多くの場合、多くの人がセッションIDをCookieに保存しますが、特にオープンフォームではお勧めしません。 Cookieに何かを保存してから暗号化、さらにはチェックを行うと、フォームの場合と同様に、変更も問題にならないため、何が来たのかを信頼できないためです。 ところで、ここでは、ユーザーパスワードに使用されたソルトが役立ちます。



建築



プロジェクトのアーキテクチャを正しく考える必要があります。プロジェクト全体を松葉杖と自転車で作成する場合、何も良い結果にならず、穴だけになります。 MVCを使用してみてください。これは、コードを論理コンポーネントに区別するのに役立ちます。



オペレーティングシステム



Linuxであるべきであることを明確に示します。 セキュリティについては知りませんが、必要な場所から人の手が伸びたら、どのサーバーでも構成できます。

人々の言葉から、Windowsをカスタマイズできることは明らかなので、決定はあなた次第です。

vindosに腹を立てる人がいれば、すみませんが、彼と一緒に仕事をする必要はありませんでした。友人のフィードバックに基づいて意見を述べました。



あなたはまだトラフィック分析について書くことができますが、私はこれをしませんでしたので、私はこのための専門家があるかどうか確かにわかりません。



おわりに



上記から、次の結論を引き出すことができます。





これらのヒントはすべて、ハッキングの脅威からあなたを救うわけではありませんが、それを非常に複雑にするのに役立つので、すべてのハッカーがそれをクラックできるわけではありません。 また、JavaScriptを使用したデータ検証は戦いの半分に過ぎないことを忘れないでください。安全に無効にしたり、すべてのデータを再確認したりすることができます。 。



PS。 Windowsについて、私は確かに知らないと言った。 彼女のことをひどく話すすべてを読んだというだけなので、誰かを怒らせたらごめんなさい。

初心者向けのこれらのヒント、PDOおよびORMについては意味がありません。

私はこの情報が多くの人に知られていることを知っていますが、少なくともそれほど多くの情報が提示される記事を見つけていません。

私は誰も驚かなかった。これについてほとんど知らない人が欲しかった。



All Articles