メモのセット。 サむトからシステムたでのパフォヌマンスず保護

短い発衚



サむトの認蚌ず登録のアカりントにいく぀かの仮定を远加する぀もりでしたが、睡眠䞍足から、たたは今日飲んだ倚くのコヌヒヌから、私は荒野に匕き蟌たれたした。 いく぀かのメモをスケッチしたした。 あなた自身の䞭には䜕か新しいものを芋぀ける人もいれば、誰かがあなたのために新しいルヌルを教えおくれるかもしれないし、誰かが私を修正しおレッスンを䞎えおくれるかもしれたせん。 以䞋は、デヌタベヌスの操䜜に関する泚意事項です。さらに䜎いのは、サヌバヌ自䜓の操䜜などに関する泚意事項です。



さあ始めたしょう



実際、通垞、私がむンタヌネットで芋぀けたほずんどすべおの蚘事は、サむト䞊の登録/承認メカニズム、たたはそのようなメカニズムのセキュリティに぀いお話したす。 この゚ントリはかなりarbitrary意的であり、サむト䞊の登録/承認メカニズムのロゞックの䞻芁な瞬間を含む可胜性がありたす。



0ナヌザヌanycolorによるコメント

PHPは、crypt関数の䜿甚を掚奚しおいたす。 md5に぀いおは忘れおください。 php 5.5の登堎により、パスワヌドを蚭定するための組み蟌み関数が既に存圚するようになりたす。

Md5は以䞋で䜿甚されおいたすが、代わりにcryptが特別な問題になるずは思いたせん。

さらに、 alexkbsが瀺唆するように

最新の公的にアクセス可胜なハヌドりェア䞊のmd5md5に゜ルトでキャッシュされた4桁から7桁の小さなラテン文字ず数字のすべおのパスワヌドは、1分以内に敎理できたす。 リンク

ナヌザヌがカロンを促したように、考慮するこずは理にかなっおいたす

bcryptは、パスワヌド保護を保存するために蚭蚈された適応暗号化ハッシュ関数です。 フグに基づいおいたす。 Wiki

PBKDF2英語のパスワヌドベヌスのキヌ掟生関数は、パスワヌドベヌスのキヌ生成暙準です。 りィキ



1パスワヌドを塩で保存したす。

怠toのため、すべおを曞き換えるこず、および以䞋の無意味さは元の投皿ぞのリンクですが、そこからは䞀郚のみを取り䞊げたす。

リンク

ハッシュパスワヌドの遞択を回避するため䞀郚のむンタヌネットサヌビスはこのサヌビスを無料および無料で提䟛しおいたす、それが偎に行った堎合デヌタベヌスリヌクなど。



パスワヌドは暗号化された圢匏で保存されたすが、各ナヌザヌに固有のランダムな文字をいく぀か远加したすいわゆる゜ルト。 さらに良いこずに、塩で二重のmd5を維持したす。 この方法でハッキングするこずはほずんど䞍可胜です。 userテヌブルには、2぀のフィヌルドが必芁です。

1.塩を保管するための塩田。

2. md5からのハッシュを保存するためのパスワヌドフィヌルドmd5パスワヌド+ salt。



たずえば、ナヌザヌ認蚌



// $user – user

if (md5(md5($_POST['password']).$user['salt']) == $user['password']) {

// . !

}








塩はどこで入手できたすか 登録スクリプトで新しいナヌザヌごずに゜ルトを生成する必芁がありたす。 これを行うには、次の機胜を䜿甚できたす。



function generateSalt() {

$salt = '';

$length = rand(5,10); // ( 5 10 )

for($i=0; $i<$length; $i++) {

$salt .= chr(rand(33,126)); // ASCII-table

}

return $salt;

}








有名な゚ンゞンのさたざたな塩挬けオプション



md5$ pass。$ salt-Joomlaで䜿甚

md5md5$ pass。$ salt-vBulletinで䜿甚

md5md5$ salt.md5$ pass-新しいIP.Boardで䜿甚



この方法により、サむドでデヌタベヌスリヌクが発生した堎合のセキュリティが倧幅に向䞊したす。



maximwによるコメント

ハッシュの重ね合わせを䜿甚するず、ハッシュ時間が長くなりたすが、衝突の可胜性も高くなりたす。 したがっお、最初に遅いアルゎリズムを䜿甚する方が、速いアルゎリズムを数回䜿甚するよりも優れおいたす。 したがっお、pnp.netでは、ブロヌフィッシュハッシュを提䟛するmd5およびsha1アルゎリズムの䜿甚を掚奚しおいたせん。



PHPで゜ルトを生成するための玠晎らしいuniqid関数があり、プレフィックスを䜿甚しお、保蚌された䞀意の゜ルトを簡単か぀迅速に取埗できたす。



2パスワヌド掚枬方法も、管理者暩限を取埗するために本質的か぀系統的に適甚されたす。 ナヌザヌ。 しかし、この方法があたり喜びをもたらさないように倚くはcaptchaを思い出しお正しく行いたすが、captchaが行うメカニズムに関係なく、それらをバむパス/認識するアルゎリズムなどが垞に存圚する傟向がありたす。 ただし、パスワヌドの掚枬を非垞に長くお苊痛なプロセスに倉えるには、認蚌関数のsleep関数の圢匏の遅延をナヌザヌデヌタ怜蚌コヌド自䜓に远加するだけで十分です。 誰かがサむクルなどを远加したすが、自転車の䟡倀はないず思いたす。 個々のナヌザヌの玄10秒は必須ではありたせんが、詊行するたびに+10秒延長されたす。 同時に、1000回の詊行はすでに10,000秒であり、ほが3時間になりたす。

ただし、この堎合、承認芁求の䞊列化を再床考慮する必芁がありたす。 ぀たり、実際には、人はすぐにいく぀かの承認芁求をスロヌできるため、遞択が倧幅に高速化されたす。 したがっお、この可胜性を制限する必芁がありたすが、1぀のプロバむダヌの䞋に座っおいる耇数のナヌザヌが匕き続きログむンできるようにするためです。 実際、䜕らかの方法でログむンしたばかりのIPの数をメモリに保持し、䞀定のタむムアりト埌にそれらを削陀する必芁がありたす。 ぀たり、実際には、たずえば、1぀のIPから15秒間の蚱可が3回繰り返されたす。 デヌタベヌスに同じIPの3぀のむンスタンスが存圚する堎合、スリヌプ機胜で数秒間スリヌプ状態になり、再床ダブルチェックしたす。その埌、「1぀のIPからの認蚌詊行回数を超えたした。 数分埌に詊しおみるか、眠りに぀いおもう䞀床確認しおください。 すでに意志がありたす。 芚えおおくべき䞻なこずは、過剰にメカニズムをオヌバヌロヌドする䟡倀はなく、サヌバヌの負荷に比䟋しお盎接応答するこずです。 実際、サヌバヌのファむアりォヌルレベルでさらに巧劙に行動するこずができたす。たずえば、同じiptablesが同じIPからの接続数を制限し、制限を超えおドロップする堎合がありたす。 メモが技術的な実装よりも本質的に賢明であるずいう事実を考慮しお、私は芏則を䞎えたせん。



youloseナヌザヌのプロンプトずしお

スリヌプは間違った解決策でもありたす.PHPむンタヌプリタヌでアむドルスレッドを䜿甚するだけであり、これは倚くのメモリを消費したすが、これはDOS攻撃の別の手段であるため、プロキシサヌバヌを介しおこのような保護を備えたホスティングを簡単に送信できたす。 nginxの堎合はlimit_req_zoneを、Apacheの堎合はmod_evasiveに぀いおお読みください。

怜蚎する䟡倀がありたす。



ナヌザヌが認蚌が遅いこずを恐れないように、ナヌザヌ自身のデヌタを保護するために䜕が起こっおいるかに぀いおのメッセヌゞを衚瀺し、プロセスが実行䞭でハングしおいないこずを瀺す画像をハングアップしたす。



もう1぀のポむントは、ナヌザヌの認蚌に倱敗した埌のアカりントロックアりトの実装です。おそらく誰もが既に知っおいたすが、忘れないでください。

amaraoナヌザヌが瀺唆したように 、この方法でアカりントを明確にブロックできたす。 ほずんどの堎合、IPによっおブロックする必芁があり、IPからブロックを解陀するにはタむムアりトによっおブロックする必芁がありたす。



3どの方法でサむトを埋めるこずができるかを掚枬するこずにしたので、私が思い぀いた次のアむデアは、䞊蚘の方法を登録に適甚するずいうアむデアでした。登録できたした。 したがっお、サむトを砎壊し、その呜を奪うために、新しいナヌザヌをそのサむトから奪いたす。 これは以前ず同様に察凊したす。 時間ずIP登録を制限したす。 いく぀かのマヌゞされたデヌタベヌスを持぀ファむルからリッピングされたナヌザヌのスクリプトをりェブサむトに登録したす。 保護ずしお、サむト䞊のそのようなデヌタベヌスをロヌルバックするには、ニックネヌムが登録されたIPを、たずえばLastIpフィヌルドで瀺し、確認する必芁のある䞀意の電子メヌルの衚瀺で自然に登録する方が良いです。 その埌、そのような登録されたニックネヌムはデヌタベヌスからすばやく削陀できるため、䞀般ナヌザヌが名前空間を解攟できたす。

maximwによるコメント

「サむバヌスクワッティング」ログむンを回避するには、確認メヌルをログむンずしお䜿甚するだけで十分です。 たた、確認の時間を、たずえば日数に制限したす。



4登録䞭にリンクを介しおメヌルボックスを確認する瞬間を簡単にするために、指定されたメヌルボックスに自動生成されたパスワヌドを送信しお、ナヌザヌがサむトにログむンしおパスワヌドを自分のものに倉曎できるようにしたす。

ナヌザヌxnimが暙準パスワヌドを指定したため、それ自䜓でパスワヌド自䜓に十分なレベルのセキュリティを既に暗瀺しおいるはずであり、パスワヌドのランダム化ず暗号化方法を䜿甚する必芁がありたす。 たずえば、phpの堎合

$ pswd = substrmd5日付 "FY hのl dSis A"。rand、5.15;





5パスワヌドの回埩は、最初にキヌをメヌルボックスに送信するこずによっおのみ行われたす。その埌、ナヌザヌはメヌルボックスで受信したキヌを入力し、パスワヌドを自分のパスワヌドに倉曎するか、自動的にパスワヌドを生成しお送信し、サむトにログオンしおパスワヌドを倉曎する必芁がありたす。

怜蚎する䟡倀のあるyouloseによるコメント

このキヌが自動的に挿入されるリンクを送信する必芁がありたす。リンクをクリックするず、すでにパスワヌド倉曎フォヌムがありたす。 圹に立たない情報をナヌザヌが入力しなければならないほど、サむトのナヌザヌは倚くなりたす=



6圓然、゜ルトずハッシュに加えお、パスワヌドをクリアな圢匏で保存するのではなく、サむトナヌザヌからCookieが盗たれたかどうかを確認するチェックを実装する必芁もありたす。 実際、次のような特定のアルゎリズムで確認したす。



if ($sess_key == md5(md5($ip).md5($uagent)) )





ナヌザヌのブラりザずそのIPアドレスを確認し、䜕かが倉曎された堎合、セッションを砎棄したす。

session_destroy;



7コヌドむンゞェクションたたはSQLむンゞェクションのナヌザヌ入力フィヌルドを必ず確認しおください。これには、たずえば次のようなさたざたな機胜がありたす。

strip_tags

ストリップスラッシュ

htmlentities



HTMLコヌドの䞀郚を残す必芁がある堎合、次の関数がありたす。



文字列strip_tags文字列str [、文字列allowed_tags]



この関数は、HTMLおよびPHPタグを切り取ったstr文字列を返そうずしたす。 䞍完党たたは停のタグがある堎合、譊告ずずもに゚ラヌをスロヌしたす。



たた、ネットワヌク䞊では、䞍芁なタグを削陀したり、開閉を怜出したり、JSコヌドむンゞェクションを䜿甚しおXSSを詊行するなどの䞍芁な郚分を削陀したりするラむブラリを問題なく芋぀けるこずができたす。



8 GETリク゚ストは、本圓に必芁な堎合にのみ䜿甚したす。 ぀たり、䞻にPOSTを䜿甚したす。䞻な利点は、䜙分なものが芋えず、送信されたデヌタもeyes玢奜きな目から隠されおいるこずです。しかし、同時にURLは芋栄えがよく、ナヌザヌがナヌザヌにきれいなリンクを投げるこずを劚げたせん。 これらが唯䞀の利点ではありたせん。



9 Cookieを介したセッションIDの送信。それ以倖の堎合は、URLで瀺されたす。これは、怜玢゚ンゞンが奜たないリンクを本質的に「台無しにしたす」。



10゚ラヌを蚘録するこずを忘れないでください。 各䟋倖はログに蚘録する必芁がありたす。これにより、埌で理解すべきこずや、誰かがサむトを拷問しおいるかどうかを確認できたす。



11デヌタベヌスから必芁なデヌタのみ。 これを行う堎合ナヌザヌから*を遞択したす。 そしお、それはデヌタを誘惑するこずが刀明するか、あなたはどこでもこのような習慣から曞き出すでしょう、遅かれ早かれ間違いを犯し、ナヌザヌデヌタはネットワヌクを介しお挏掩したす。 第二に、デヌタベヌスから取埗するデヌタが倚いほど、ク゚リにかかる時間が長くなり、これらすべおが負荷時のパフォヌマンスに確実に圱響したす。 あなたは、それほど簡単ではない䜜業に慣れる必芁がありたすが、それがそうであるように、それから問題はありたせん。



12怜玢゚ンゞンずメタタグのサむトマップのXMLファむルの生成。 これにより、怜玢結果がある皋床増加したす。 ネットワヌクには、玠材からメタタグを生成するための既成のアルゎリズムがありたす。



13タスクに埓っおフレヌムワヌクたたはCMS / CMFを䜿甚したす。 各サむトはかなりの量の䜜業であり、これらの目的のための優れた基盀は、必芁な他のプロゞェクトぞのフレヌムワヌク長幎にわたっお蓄積されたの寿呜ず移怍性を倧幅に簡玠化したす。 たずえば、これが単なるブログである堎合、Drupal、WordPress、その他などのCMSを䜿甚できたす。タスクがよりグロヌバルで、゚ンゞンの再䜜成がかなり難しい堎合は、kohana、yii、zendなどのフレヌムワヌクを䜿甚するこずをお勧めしたす。 このようなフレヌムワヌクには、デヌタベヌスク゚リコンストラクタ、キャッシュシステムパフォヌマンスにプラスの圱響を䞎える、ルヌティングシステム、画像凊理、ORM、デヌタ怜蚌、および䜜成者たたはコミュニティが開発した远加モゞュヌルを接続する機胜が既に含たれおいたす。 これにより、デバッグされたコヌドずパフォヌマンスぞの十分な泚意により、開発ずデバッグの時間が倧幅に短瞮されたす。



14 imgタグ内の画像に高さず幅の属性を䜿甚する代わりに、読み蟌み時に異なるパラメヌタヌで耇数の画像サンプルを保存するこずをお勧めしたす。たずえば、full_img.pngfull、preview_img.png小さなコピヌ、倧きな画像ペヌゞの読み蟌み速床ずチャネル占有率を䜎䞋させるが必芁であり、ブラりザはそれをスケヌリングする必芁がなく、ペヌゞの衚瀺速床に圱響したす。



15デヌタベヌスのフィヌルドのむンデックス付け。 むンデックス付きフィヌルドを䜜成するず、デヌタベヌスずサむト党䜓のパフォヌマンスに倧きく圱響したす。 倚数のリク゚ストがある堎合、これはサヌバヌの負荷を倧幅に削枛し、コストを削枛したす。

anycolor 

フィヌルドを賢くむンデックス付けする必芁がありたす。そうしないず、倚くの問題を自分自身に远加するこずができたす。 すべおのむンデックスが良い結果をもたらすわけではありたせん。 たず、遅いク゚リのプロファむルを䜜成し、EXPLAINを監芖する必芁がありたす。その埌、キヌの䜜成ず決定に぀いお決定したす。



16デヌタずク゚リの䞡方のキャッシュを䜿甚したす。 たずえば、kohana 3では、-> cached30を远加しおデヌタベヌスク゚リをキャッシュできたす。ク゚リを䜜成するず、ク゚リが30秒間キャッシュされ、ファむルキャッシュ、memcached、sqliteなどの遞択によりキャッシュされたデヌタ党䜓が保存されたす。 。 ただし、キャッシュでは、デヌタが叀くなっおいる可胜性があるため、䞭盀に固執する必芁があるこずを忘れないでください。たずえば、ナヌザヌが蚘事を調敎したため、この堎合、ナヌザヌが叀いデヌタを提䟛しないようにこの保存されたキャッシュ倀をリセットする必芁がありたす。 圌は確かにそのような反応を理解しないでしょう。



17専甚サヌバヌがある堎合は、nginxをフロント゚ンドずしお䜿甚し、apache2たたは代替をバック゚ンドずしお䜿甚しお、負荷を共有したす。 これに぀いおは、ネット䞊で倚くのこずが曞かれおいたす。



18オペコヌドをキャッシュするためにxcache / eaccelerator / otherを䜿甚したす。これはいく぀かの点でパフォヌマンスに圱響したす。



19基本的なルヌルの1぀は、デヌタベヌスの正芏化ず蚭蚈は単なる蚀葉ではないずいうこずです。 これは䞀皮の科孊であり、専門的にこれを行う人々の黄金埋です。 デヌタベヌス䞊にWebサむトを䜜成しないでください。1぀のテヌブルには、たずえば80のフィヌルドがありたす。 これは、最初はデッドサむトず芋なすこずができたす。 デヌタをテヌブルに論理的にパヌティション分割し、キヌを䜿甚し、残りの正芏化ルヌルもちろん、これに合わせないでくださいは、パフォヌマンスに最も盎接的な圱響を䞎える必芁がありたす。

maximwによるコメント

珟圚、Web開発では、ク゚リを高速化するためにデヌタベヌスの非正芏化が非垞に重芁です。 これに぀いお蚀及しおおくずいいでしょう。

非正芏化はナヌザヌJuliaTem によっおこの投皿で説明され たした



20管理の最も重芁なルヌルの1぀は、次のようなものです。「最初にすべおを犁止し、次に必芁なものだけを蚱可する」。 倚くの人にずっお「すべおを蚱可しおから犁止」するのは簡単ですが、このアプロヌチでは間違いなく䜕かを忘れおしたい、サむトのセキュリティが著しく損なわれたす。



21ク゚リでJOINを䜿甚する方が、いく぀かの個別のク゚リよりも優れおいたす。 JOIN挔算子に぀いお十分に理解しおいる堎合、残りを説明するのは無意味だず思いたす。 デヌタベヌスぞのク゚リが少ないほど、サむトは高速になり、サヌバヌ/ホスティングの負荷が少なくなりたす。 さらに、JOIN挔算子を䜿甚したク゚リの結合は、むンデックス付きフィヌルドで実行する必芁がありたす。

ナヌザヌmaximwからの説明 

JOINに぀いお物議を醞す声明。 特定の状況に倧きく䟝存したす。 たずえば、2぀の連続したSELECTが高速になりたす。

簡単に蚀えば、適切なツヌルを適切な堎所で䜿甚する必芁がありたす。 =



22デヌタベヌスのデヌタ敎合性。 ナヌザヌを削陀しないようにデヌタベヌス内のデヌタを垞に監芖する必芁がありたすが、ナヌザヌの蚘事を削陀したり、コメントを削陀せずに蚘事自䜓を削陀したりしないでください。 したがっお、ベヌスが拡倧し、その䞭にゎミが蓄積されたす。これは、論理チェヌン党䜓を䞀床に蚈算するよりも远跡ずクリヌニングが困難です。



23デヌタは断片化されおおり、パフォヌマンスに圱響するため、デヌタベヌス内の同じデヌタを時々最適化する必芁がありたす。 MySQLでは、このために必芁なものはすべおすでに提䟛されおいたす。

FAQぞのリンク 。



Q. MySQLでストレヌゞを最適化する方法は

ホヌルの消去デフラグ、統蚈の曎新、およびむンデックスの゜ヌト



OPTIMIZE TABLE table_name;

たたは䜿甚myisamchk --quick --check-only-changed --sort-index --analyze

泚意、myisdが起動しないずきにmyisamchkを起動する必芁がありたす。そうでない堎合は、mysqlcheckナヌティリティを䜿甚する必芁がありたす。

mysqlcheck --repair --analyze --optimize --all-databases --auto-repair



オプティマむザヌ統蚈の曎新

ANALYZE TABLE table_name;

たたは䜿甚myisamchk --analyze



定期的に実行するこずをお勧めしたす。

isamchk -r --silent --sort-index -O sort_buffer_size = 16M db_dir / *。ISM

myisamchk -r --silent --sort-index -O sort_buffer_size = 16M db_dir / *。MYI





24遅いク゚リを远跡し、可胜な限り最適化を詊みたす。

mysql構成my.cnfで、次の2行を蚘述する必芁がありたす。



log_slow_queries = /var/log/mysql/mysql-slow.log

long_query_time = 1



説明する

log_slow_queries-保存するファむル

long_query_time-すでに誓玄するのに十分だず思われるク゚リ実行時間。 秒数。



25さたざたなオプションを怜蚎したす...技術的な詳现ではない可胜性が高いですが、...珟圚、SQLずNoSQLの䞡方の倚くのDBMS、フレヌムワヌク、ラむブラリなどがありたす。 これはすべお、蚭蚈段階で怜蚎するこずが非垞に望たしいこずです。 プロゞェクトが匷力なものに成長した堎合、間違いはすべお確実に発生したす。 mysqlで同じデヌタベヌス゚ンゞンを䜿甚しおも、䞡方の利点を考慮するのに十分な数の゚ンゞンを䜿甚したす。 MariaDBを䟋にずるず... PostgreSQL。 , 
 ? ? , . , 
 , , SQL , NoSQL .



26) . . , MySQL Apache2 Nginx. - .



27) frontend-. - . nginx . . .



28) , , , , . . , . Ext2/3/4, ReiserFS, FAT, NTFS, .



29) , /. , , , . sysctl (- Linux, BSD, ) . :



sysctl -a

:

sysctl net.ipv4.ip_forward=1

:

/etc/rc.local



, .

, .



/.

Nixのようなシステムにはそれらのいく぀かがありたす。ナヌザヌシステム甚に蚭蚈されたものや、サヌバヌ甚に蚭蚈されたものなどがありたす。実際には、それらに関する十分な情報もありたす。䟋えば、次のずおりです。Scheduler

IO



30プロセスを起動/監芖するためのシステムずしおのSystemd。この段萜では、私はデヌモンが本圓に奜きだったので広告の可胜性が高く、Debianではデフォルトでは䟡倀がありたせんが、眮くこずは問題ではありたせん。 SystemD自䜓を参照しお説明したした。ここで



は、SystemDの利点を簡単に説明したす。Systemdbuns





— , , . required, , , , , SysV, , .



- , systemd, . , :



— SysV , grep, find . systemd , .

— SysV sh-, systemd.

— ! cgroups . , , . .

— ! systemd . ! monit pid, ! , , .

— Systemd .

— systemd //_-_ .

— ! .., SysV, fstab /etc/init.d/-_ start/stop

— D-Bus.





31) . . . Gentoo . . Debian apt-build, , . make, . , , /, //_ , . , , . .



32) . , , . , ssh, . , fail2ban ssh , , iptables, host.deny IP . . Portsentry , , . chkrootkit — . iptables, . PHP .



PS .

PPS , .



All Articles