2011-06-24 23 views
2

私はユーザー入力からmySQLデータベースにphp関数を保存していますが、これらの関数を実行できる必要があります。危険なphp関数

私たちが知っているように、これはハッカーがかなりのウェブサイトをスイスチーズに変えることを可能にし、

これらの関数は単純であり、高度なPHPコーディングを必要としません。彼らはデータの単一の配列を扱うことに関するより多くのことです。

ハッカーが管理者セクションのIDに入ると、データベースに保存する前に深刻な被害を受ける可能性のあるPHP関数をフィルタするようになります。

"exec、shell_exec、system、passthru、popen、proc_open、proc_close"のようなものは、カールのような外部入力を取り除く必要があるものは削除する必要があります。

他に危険な可能性があり、削除する必要があるものは何ですか?

は、私もこのリストを見つけました:私は、ユーザー入力からMySQLデータベースへのPHPの関数を格納してい http://blog.eukhost.com/webhosting/dangerous-php-functions-must-be-disabled/

apache_child_terminate 
apache_setenv 
define_syslog_variables 
escapeshellarg 
escapeshellcmd 
eval 
exec 
fp 
fput 
ftp_connect 
ftp_exec 
ftp_get 
ftp_login 
ftp_nb_fput 
ftp_put 
ftp_raw 
ftp_rawlist 
highlight_file 
ini_alter 
ini_get_all 
ini_restore 
inject_code 
mysql_pconnect 
openlog 
passthru 
php_uname 
phpAds_remoteInfo 
phpAds_XmlRpc 
phpAds_xmlrpcDecode 
phpAds_xmlrpcEncode 
popen 
posix_getpwuid 
posix_kill 
posix_mkfifo 
posix_setpgid 
posix_setsid 
posix_setuid 
posix_setuid 
posix_uname 
proc_close 
proc_get_status 
proc_nice 
proc_open 
proc_terminate 
shell_exec 
syslog 
system 
xmlrpc_entity_decode 
+7

ホワイトリスト登録>>>>>>>ブラックリスト登録。また、実行可能コードをDBに格納しないことは、さらに優れています。 – delnan

+0

経験豊富なプログラマーの手でどの機能が危険になるかは、かなり驚いています:)。あなたが本当にこれをしなければならないのであれば、@delnanが言うようにホワイトリストを使用してください。 – kapa

+0

本当に何らかの形のユーザースクリプトを提供したい場合は、Luaなどのサンドボックス対応の言語で簡単に実行することをお勧めします。 – Amber

答えて

2

アイブ氏は、このような何かのために行くことにしました。

5

は、これらの機能を実行することができるようにする必要があります。

これはひどい考えです。 「安全な」関数のリストをコンパイルすることは非常に難しく、PHPは知識のある人に悪用される可能性のあるローカルの脆弱性でいっぱいです。

ホワイトリストも非常に難しいでしょう。 $a = 'exe'; $a .= 'c'; $a('echo foo');のようなコードを検出することは難しく、execと呼ばれます。実行可能コードの格納を伴わない代替戦略を検討してください。

13

ユーザー入力によって定義された関数を決して実行しないでください。ユーザーが止めることのできない関数名を隠すことができる何百もの方法があります。たとえば、関数名を変数に保存し、その変数で関数を実行することができます。

<?php 
$test = "readfile"; 
$test("somePageWithDatabasePassword.php"); 
?> 

これは完全に有効です。変数から実行される関数をテストできると思うなら、chr()、連結、16進数などを使用する方法があります。これは私のユーザーが直接PHPコードなしが独自の方法でそこにデータをフォーマットできるようになります

http://mustache.github.com/#demo

+2

QFT 'ユーザー入力によって定義された関数を決して実行してはいけません。 ' – FinalForm

+0

@FinalForm QFTとは何ですか? – daisy

+0

@ warl0ck "は真実を引用しました"。 http://www.urbandictionary.com/define.php?term=quoted%20for%20truth –

関連する問題