2

私は仕事の前にウェブサイトが3回ハッキングされたウェブサイトでフリーランスで働いています。

私は現在作業中であり、いくつかの変更を行った後、セキュリティのためにこれらの手順を使用してアップロードします。他のいくつかのヘルプの完全なヒントをいただければ幸いです。

一部のポートが安全ではなかったため、サーバーに問題があると思いました。そして、それを見つけてサーバー管理者に伝えることができません。

ハッキングから完全に安全なサイトを作りたい:

これらの2つの関数を使用して、SQLインジェクションを防止します。

function escape($string) {
    if(get_magic_quotes_gpc()) $string = stripslashes($string);
    return mysql_real_escape_string($string);
}

そして、いくつかの時間の使用:

function remove_spc_chr($str){
        $str=trim($str);

        $arr=array('%','$','/','\\','*','+','=','\'','"','#','@','(',')','^','~','`','&',
                ',',';','\'','?','<','>','!','{','}','[',']');

        $str=str_replace($arr,'',$str);

        $str=strip_tags($str);

        return $str;        
}

そして私はhtaccessセキュリティのためにこのコードを使用します:

RewriteEngine on
Options -Indexes

Options +FollowSymlinks
RewriteRule ^(.*)\.html$ $1.php [nc]


Options +FollowSymlinks
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} http:.*\/.*\/ [OR]
RewriteCond %{QUERY_STRING} ..*\/ [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteCond %{QUERY_STRING} [^a-z](declare|char|set|cast|convert|delete|drop|exec|insert|meta|script|select|truncate|update)[^a-z] [NC]
RewriteRule (.*) - [F]


<IfModule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT} (google|yahoo|aol|slurp|bing) [OR]
RewriteCond %{HTTP_REFERER} (google|aol|yahoo|search|bing)
RewriteCond %{REQUEST_URI} /$ [OR]
RewriteCond %{REQUEST_FILENAME} (html|htm|php|phps|shtml|xml|xhtml|phtml)$ [NC]
</IfModule>




#Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

#Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]

#Block out any script that includes a script tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]


#Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]

#Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

#Send all blocked request to homepage with 403 Forbidden error!
#RewriteRule ^(.*)$ index.html [F,L]


#DirectoryIndex index.html

SetEnv TZ America/California
AddDefaultCharset utf-8
DefaultLanguage en-US
LimitRequestBody 10240000

        <FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
         Order Allow,Deny
         Deny from all
        </FilesMatch>

        <ifmodule mod_php4.c>
         #php_value zlib.output_compression 16386
        </ifmodule>

        AddType image/gif                       .gif .GIF
        AddType image/ief                       .ief
        AddType image/jpeg                      .jpeg .jpg .jpe .JPG
        AddType image/tiff                      .tiff .tifAuthName wapadik.net
        IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

        RewriteCond %{REQUEST_METHOD} (GET) [NC]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)https(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)https%3a(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)http(%3A|:)(/|%2F){2}(.*)$ [NC]
        RewriteRule (.*) /huwad/blocker/blocker1.php   [L]

        RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
        RewriteCond %{QUERY_STRING} ^(.*)(%20SELECT%20|%20INSERT%20|CHAR\(|%20UPDATE%20|%20REPLACE%20)(.*)$ [NC]
        RewriteRule (.*) /huwad/blocker/blocker1.php   [L]

        RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
        RewriteCond %{QUERY_STRING} ^(.*)(%3C|<)/?script(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [OR]

        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)http%3a(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)ftp(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)ht%20tp(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)htt%20p(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)http%20(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)h%20ttp(%3A|:)(/|%2F){2}(.*)$ [NC,OR]

        RewriteCond %{QUERY_STRING} ^(.*)base64_encode(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)GLOBALS(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)_REQUEST(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
        RewriteCond %{REQUEST_URI} ^(.*)_vti(.*)$ [OR]
        RewriteCond %{REQUEST_URI} ^(.*)MSOffice(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)/etc/passwd(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)//(.*)$ [OR]
        RewriteCond %{REQUEST_URI} ^(.*)ShellAdresi.TXT(.*)$ [OR]
        RewriteCond %{REQUEST_URI} ^(.*)\[evil_root\]?(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)\.\./\.\./\.\./(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)/proc/self/environ(.*)$
        RewriteRule (.*) /huwad/blocker/blocker1.php   [L]

        RewriteCond %{HTTP_USER_AGENT} @nonymouse|ADSARobot|amzn_assoc|Anarchie|ASPSeek|Atomz|^[^?]*addresses\.com|Advanced\ Email\ Extractor|ah-ha|aktuelles|almaden|Art-Online|AspiWeb|ASSORT|ATHENS|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|Bot\ mailto:craftbot@yahoo.com|BravoBrian\ SpiderEngine\ MarcoPolo|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Crescent\ Internet\ ToolPack|cURL|Custo|cyberalert|Deweb|diagem|Digger|Digimarc|DIIbot|DirectUpdate|DISCo|Download\ Accelerator|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|echo\ extense|ecollector|efp@gmx\.net|EirGrabber|EmailCollector|Email\ Extractor|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|fastlwspider|FavOrg|Favorites\ Sweeper|Fetch\ API\ Request|FEZhead|FileHound|FlashGet|FlickBot|fluffy|frontpage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go!Zilla|Go-Ahead-Got-It|GornKer|Grabber|GrabNet|Grafula|Green\ Research|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|HTTP\ agent|HTTPConnect|httpdown|http\ generic|HTTrack|^[^?]*iaea\.org|IBM_Planetwide|^[^?]*\.ideography\.co\.uk|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkAgent|InternetSeer\.com|Iria|Irvine|iOpus|IPiumBot\ laurion(dot)com|Jakarta|JBH*Agent|JetCar|JustView|Kapere|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MemoWeb|MCspider|Microsoft\ URL\ Control|MIDown\ tool|minibot\(NaverRobot\)|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|netfactual|netcraft|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NEWT|nicerspro|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OutWit|PackRat|PageGrabber|Papa\ Foto|pavuk|pcBrowser|PersonaPilot|PingALink|Pockey|Program\ Shareware|psbot|PSurf|puf|Pump|PushSite|QRVA|QuepasaCreep|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Shai|sitecheck|SiteMapper|SiteSnagger|SlySearch|SmartDownload|snagger|SpaceBison|Spegla|SpiderBot|SqWorm|Star\ Downloader|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Telesoft|Templeton|traffixer|TrueRobot|TuringOS|TurnitinBot|TV33_Mercator|UIowaCrawler|URL_Spider_Pro|UtilMind|Vacuum|vagabondo|vayala|visibilitygap|vobsub|VoidEYE|vspider|w3mir|web\.by\.mail|Web\ Data\ Extractor|Web\ Downloader|Web\ Image\ Collector|Web\ Sucker|WebAuto|webbandit|Webclipping|webcollector|webcollage|WebCopier|webcraft@bea|WebDAV|webdevil|webdownloader|Webdup|WebEmailExtractor|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WebMiner|WebMirror|webmole|WebReaper|WebSauger|WEBsaver|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|whizbang|WhosTalking|Widow|WISEbot|WUMPUS|Wweb|WWWOFFLE|Wysigot|Xaldon\ WebSpider|XGET|x-Tractor|Zeus.* [OR]

        RewriteCond %{REQUEST_URI} .*((php|my)?shell|remview.*|phpremoteview.*|sshphp.*|pcom|nstview.*|c99|r57|webadmin.*|phpget.*|phpwriter.*|fileditor.*|locus7.*|storm7.*)\.(p?s?x?htm?l?|txt|aspx?|cfml?|cgi|pl|php[3-9]{0,1}|jsp?|sql|xml) [NC,OR]
        RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
        RewriteCond %{QUERY_STRING} ^(.*)=/home(.+)?/(.*)/(.*)$ [OR]
        RewriteCond %{QUERY_STRING} ^work_dir=.*$ [OR]
        RewriteCond %{QUERY_STRING} ^command=.*&output.*$ [OR]
        RewriteCond %{QUERY_STRING} ^nts_[a-z0-9_]{0,10}=.*$ [OR]
        RewriteCond %{QUERY_STRING} ^c=(t|setup|codes)$ [OR]
        RewriteCond %{QUERY_STRING} ^act=((about|cmd|selfremove|chbd|trojan|backc|massbrowsersploit|exploits|grablogins|upload.*)|((chmod|f)&f=.*))$ [OR]
        RewriteCond %{QUERY_STRING} ^act=(ls|search|fsbuff|encoder|tools|processes|ftpquickbrute|security|sql|eval|update|feedback|cmd|gofile|mkfile)&d=.*$ [OR]
        RewriteCond %{QUERY_STRING} ^&?c=(l?v?i?&d=|v&fnot=|setup&ref=|l&r=|d&d=|tree&d|t&d=|e&d=|i&d=|codes|md5crack).*$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)([-_a-z]{1,15})=(ls|cd|cat|rm|mv|vim|chmod|chdir|mkdir|rmdir|pwd|clear|whoami|uname|tar|zip|unzip|tar|gzip|gunzip|grep|more|ln|umask|telnet|ssh|ftp|head|tail|which|mkmode|touch|logname|edit_file|search_text|find_text|php_eval|download_file|ftp_file_down|ftp_file_up|ftp_brute|mail_file|mysql|mysql_dump|db_query)([^a-zA-Z0-9].+)*$ [OR]
        RewriteCond %{QUERY_STRING} ^(.*)(wget|shell_exec|passthru|system|exec|popen|proc_open)(.*)$
        #RewriteRule  (.*)  /huwad/blocker/blocker3.php  [L]


ErrorDocument 400 /index.html
ErrorDocument 403 /index.html
ErrorDocument 404 /index.html
ErrorDocument 405 /index.html
ErrorDocument 408 /index.html
ErrorDocument 500 /index.html
ErrorDocument 502 /index.html
ErrorDocument 504 /index.html

        <Files 403.shtml>
        order allow,deny
        allow from all
        </Files>

Htaccessリファレンス

クエリで使用する前に、変数が適切かどうかを確認します。

私にとって完全に役立つセキュリティ手順がある場合はどうなりますか?

問題や穴がある場合は、セキュリティ手順にご回答ください。

4

2 に答える 2

2

あなたが引用したこの関数に焦点を当てることから始めましょう:

function escape($string) {
    if(get_magic_quotes_gpc()) $string = stripslashes($string);
    return mysql_real_escape_string($string);
}

ここでの意図は良いですが、主に廃止されたPHP技術の使用が原因で、いくつかの大きな問題があります。

  • まず、MagicQuotesは非推奨です。PHPの最新バージョン(5.4)では、get_magic_quotes_gpc()関数が完全に削除されています。PHP 5.3にはこれが含まれていますが、非推奨の警告がスローされます。

    PHP 5.4を使用している場合、このコードはまったく機能しません。

    PHP 5.3を使用している場合は、エラーメッセージが生成されていることにすでに気付いているはずです。それらを無視するようにPHPを設定することはできますが、それは良い考えではありません。魔法の引用符がオフになっていることを確認する必要があります。このコード行を削除できます。

    PHP 5.2以前を使用している場合は、アップグレードする必要があります。5.2は2年間サポートされておらず、パッチが適用されないことがわかっているセキュリティの問題があります。

  • 次に、mysql_xxx()関数は非推奨になりました。これらは廃止され、安全ではないと見なされ、将来のPHPバージョンから削除される予定です。これ以上使用しないことを強くお勧めします。mysqli_xx()関数またはPDOライブラリのいずれかに切り替える必要があります。

    コードの品質(およびサイズ)によっては、これは大きな作業になる可能性がありますが、コードをより安全にしようとしている場合は重要です。

    追加のボーナスとして、mysqli拡張機能とPDO拡張機能の両方がPrepared Queriesと呼ばれるSQL手法を提供します。これにより、パラメーターを手動でエスケープしなくてもSQLクエリを作成できます。これは、関数の使用に完全に代わるものとして、現在のベストプラクティスと見なされていescape_stringます。繰り返しになりますが、これは既存のシステムに実装するのにかなりの作業になりますが、セキュリティの名目でそれだけの価値があるかもしれません。

ここで、SQLインジェクションを防ぐために使用している2番目の関数は次のとおりです。

function remove_spc_chr($str){ ... }

カテゴリ的には、これは機能しません。この関数を使用して関数と同じ仕事をしているescape()場合は、非常に簡単にハッキングできます。文字列に文字を含めるなど、ハッカーがこのコードをバイパスするために使用できる方法はいくつかありnullます。使用している文字エンコードに応じて、非ASCII文字を使用して攻撃する方法もいくつかあります。ここでも取り上げられないDB。DBに送信されるデータ(または上記のように準備されたクエリ)には、常に適切なエスケープメカニズムを使用してください。

あなたが提供したhtaccessコードに関して、私はあなたがここで何をしているのかを見ることができ、特定のSQLとPHPのキーワードをブロックしようとしています。スクリプト自体が適切に保護されている場合は、いずれも必要ありません。特に、コード内のクエリが適切にエスケープ/準備されている場合、SQLキーワードは完全に安全である必要があります。さらに、多くのSQLキーワードは一般的な英語の単語であるため、それらをブロックすると、サイトのフォームに正当なテキストを投稿する人々に問題が発生する可能性があります。

あなたが引用したすべてのものに関してあなたが抱えている他の問題は、それがほんの一握りのかなり特定の攻撃しか扱っていないということです(私が知る限り、そのほとんどはサイトを危険にさらした攻撃ではないでしょう)。あなたが扱っていない攻撃ベクトルがたくさんあります。

しっかりとした保護を行うことをお勧めします。サーバーでPHPSuhosin拡張機能が実行されていない場合は、PHPバージョンをアップグレードしてそれを含める必要があります。これは、PHPの一般的なセキュリティ強化拡張機能です。exec()PHPサイトを保護するために多くのことを行うことができますが、あなたにとって重要な機能は、および関数などの安全でないPHPの機能を無効にするsystem()機能です。これだけでも、コードを変更することなく、サイトをハッキングする機能に大きな違いが生じます。

于 2013-01-23T12:33:41.493 に答える
0

ここには多くの問題があります。

SQLインジェクションを脆弱性として特定したと仮定すると(そして、これが以前の攻撃で悪用された脆弱性であるかどうかを確認する必要があり、他の脆弱性を調査して排除する必要があります-存在する可能性が非常に高いです)...

magic_quotesを有効にして構築されたコードベースの構成を修正することは現実的ではないかもしれないことを認めますが、最初に構成を修正することが問題に対処する正しい方法です。さらに、magic_quotesの問題の1つは、一部の拡張機能がバックドアルートを介してそれらを有効にすることです。get_magic_quotes_gpc()に必ずしも依存することはできません。ただし、構成が変更されていない場合、動作は一貫しています。したがって、動作を測定し、それに応じてコードを調整してください。マジッククォートが有効になっている場合は、理想的には、マジッククォートが現在有効になっているかどうかを示す独自のインジケーターを配置する必要があります。これにより、誰かが問題を適切に修正することに取り掛かったときに、作業が簡単になります。

しかし、ここで最初の大きなWTFは、なぜデータをエスケープするために独自のコードを使用しているのですか?これを行う必要がある唯一の方法は、mysql_real_escape_string()またはバインドされたパラメーターを使用することです。SQL文字列にスプライシングするためにデータをエスケープする方法としてremove_spc_chr()を使用する方法はありません。

ここでの2番目のWTFは、リライトチュールを使用してさまざまなタイプの攻撃に対処しようとしているように見えることです。これは、脆弱性が何であるかがわからないことを意味します。ただし、リライト構成は、ごく一部の非常に特殊な攻撃にしか対応していません。より良い解決策は、mod_securityおよび/またはfail2banを使用することです。

index.htmlを一般的なエラーハンドラーとして使用しても、優れたユーザーエクスペリエンスは提供されません。

一部のポートが安全ではなかったため、サーバーに問題があると思いました

その場合、Webサーバーに対して何もしなくてもセキュリティは向上します。

それを見つけてサーバー管理者に伝えることができません

その場合、セキュリティを向上させるためにできることはほとんどありません。

于 2013-01-23T11:50:49.973 に答える