函数使用查询字符串在php中提供一些额外的安全性

函数使用查询字符串在php中提供一些额外的安全性,php,security,Php,Security,几年前,我开始使用以下代码,包括在我的页面顶部。我读到这本书很好,并使用了它。但我想知道,这有帮助吗 $page = "index.php"; $cracktrack = $_SERVER['QUERY_STRING']; $wormprotector = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(', 'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush',

几年前,我开始使用以下代码,包括在我的页面顶部。我读到这本书很好,并使用了它。但我想知道,这有帮助吗

$page = "index.php";
$cracktrack = $_SERVER['QUERY_STRING'];
$wormprotector = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(',
 'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush', 'rush%20',
 'union%20', '%20union', 'union(', 'union=', 'echr(', '%20echr', 'echr%20', 'echr=',
 'esystem(', 'esystem%20', 'cp%20', '%20cp', 'cp(', 'mdir%20', '%20mdir', 'mdir(',
 'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
 'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv%20', 'rmdir%20', 'mv(', 'rmdir(',
 'chmod(', 'chmod%20', '%20chmod', 'chmod(', 'chmod=', 'chown%20', 'chgrp%20', 'chown(', 'chgrp(',
 'locate%20', 'grep%20', 'locate(', 'grep(', 'diff%20', 'kill%20', 'kill(', 'killall',
 'passwd%20', '%20passwd', 'passwd(', 'telnet%20', 'vi(', 'vi%20',
 'insert%20into', 'select%20', 'nigga(', '%20nigga', 'nigga%20', 'fopen', 'fwrite', '%20like', 'like%20',
 '$_request', '$_get', '$request', '$get', '.system', 'HTTP_PHP', '&aim', '%20getenv', 'getenv%20',
 'new_password', '&icq','/etc/password','/etc/shadow', '/etc/groups', '/etc/gshadow',
 'HTTP_USER_AGENT', 'HTTP_HOST', '/bin/ps', 'wget%20', 'unamex20-a', '/usr/bin/id',
 '/bin/echo', '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g++', 'bin/python',
 'bin/tclsh', 'bin/nasm', 'perl%20', 'traceroute%20', 'ping%20', '.pl', '/usr/X11R6/bin/xterm', 'lsof%20',
 '/bin/mail', '.conf', 'motd%20', 'HTTP/1.', '.inc.php', 'config.php', 'cgi-', '.eml',
 'file://', 'window.open', '<SCRIPT>', 'javascript://','img src', 'img%20src','.jsp','ftp.exe',
 'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell', 'nc.exe', '.htpasswd',
 'servlet', '/etc/passwd', 'wwwacl', '~root', '~ftp', '.js', '.jsp', 'admin_', '.history',
 'bash_history', '.bash_history', '~nobody', 'server-info', 'server-status', 'reboot%20', 'halt%20',
 'powerdown%20', '/home/ftp', '/home/www', 'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
 '<script', '/robot.txt' ,'/perl' ,'mod_gzip_status', 'db_mysql.inc', '.inc', 'select%20from',
 'select from', 'drop%20', '.system', 'getenv', 'http_', '_php', 'php_', 'phpinfo()', '<?php', '?>', 'sql=');
$checkworm = str_replace($wormprotector, '*', $cracktrack);
if ($cracktrack != $checkworm){
 $cremotead = $_SERVER['REMOTE_ADDR'];
 $cuseragent = $_SERVER['HTTP_USER_AGENT'];
 header("location:$page");
 die();
}
$page=“index.php”;
$cracktrack=$\u服务器['QUERY\u字符串];
$wormprotector=array('chr(','chr=','chr%20','%20chr','wget%20','%20wget','wget(',
“cmd=”、“%20cmd”、“cmd%20”、“rush=”、“%20rush”、“rush%20”,
“联合体%20',“%20union”,“联合体(”,“联合体=”,“echr(”,“%20echr”,“echr%20”,“echr=”,
'电子系统(','电子系统%20','cp%20','%20cp','cp(','mdir%20','%20mdir','mdir(',
“mcd%20”、“mrd%20”、“rm%20”、“20mcd”、“20mrd”、“20rm”,
“mcd(”、“mrd(”、“rm(”、“mcd=”、“mrd=”、“mv%20”、“rmdir%20”、“mv(”、“rmdir(”))、”,
'chmod(','chmod%20','%20chmod','chmod(','chmod=','chown%20','chgrp%20','chown(','chgrp(',',
“定位%20”、“grep%20”、“定位(”、“grep(”、“差异%20”、“杀死%20”、“杀死(”、“杀死所有人”),
'密码%20','%20passwd','passwd(','telnet%20','vi(','vi%20',',
“将%20插入”、“选择%20”、“黑鬼(”、“%20nigga”、“黑鬼%20”、“fopen”、“fwrite”、“类似“%20like”、“类似%20”,
“$”请求“,“$”获取“,“$request”,“$get”,“.system”,“HTTP\u PHP”,““&aim”,“%20getenv”,“getenv%20”,
‘新密码’、‘icq’、‘etc/password’、‘etc/shadow’、‘etc/groups’、‘etc/gshadow’,
“HTTP_用户_代理”、“HTTP_主机”、“HTTP_主机”、“HTTP/bin/ps”、“wget%20”、“unamex20-a”、“HTTP/usr/bin/id”,
“/bin/echo”、“/bin/kill”、“/bin/”、“/chgrp”、“/chown”、“/usr/bin”、“g++”、“bin/python”,
'bin/tclsh'、'bin/nasm'、'perl%20'、'traceroute%20'、'ping%20'、'.pl'、'/usr/X11R6/bin/xterm'、'lsof%20',
“/bin/mail”“、”.conf”“、”motd%20”“、”HTTP/1”“、”inc.php”“、”config.php”“、”cgi-“、”.eml”“,
'file://'、'window.open'、'javascript://'、'img src'、'img%20src'、'.jsp'、'ftp.exe',
“xp_enumdsn”、“xp_availablemedia”、“xp_文件列表”、“xp_cmdshell”、“nc.exe”、“.htpasswd”,
“servlet'、'/etc/passwd'、'wwwacl'、'~root'、'~ftp'、'.js'、'.jsp'、'admin_u'、'.history',
“bash_历史记录”、“bash_历史记录”、“无人”、“服务器信息”、“服务器状态”、“重新启动%20”、“停止%20”,
'断电%20'、'/home/ftp'、'/home/www'、'secure_site,ok'、'chunked'、'org.apache'、'/servlet/con',

“一般来说,我个人不会使用这种策略。我宁愿清理每个输入。如果用户在URL中传递.bash_历史,我不在乎,因为它在我的脚本中永远不会做任何事情

如果你有第三方低可靠性脚本,任何人都可以使用,那么我可以看到这样的东西是有用的。即使在那种情况下,它看起来像是一个半可靠的创可贴。
然而,对于您编写的应用程序来说,这应该是不必要的。

尽管您非常关心安全性,并且遵循以怀疑的态度对待所有输入的原则,但我不认为该列表非常有用

这是一个相当随意的选择,可能不需要的字符串/命令/标记/文件夹名称和其他东西。它可能会随着时间的推移而过时,而且可能已经过时。像这样的通用列表永远不会捕获所有内容,也可能会给你的应用程序带来一种错误的安全感,认为它是安全的,而实际上并不安全

正如另一个答案已经提到的那样,您希望检查从应用程序获得的每个输入(无论是通过查询字符串变量、POST变量还是其他方式),并验证它是否满足您的期望(例如,如果您期望一个数值,那么该值是否以数字形式传递?)


然后,如果您计划重新显示或重新使用该数据,您可能需要进一步清理,并删除在使用该数据的上下文中可能存在危险的内容。例如,您可以删除“脚本”标签,如果要在网页上显示数据。

如果正确清理所有用户输入,则绝对不需要使用这样的脚本


除此之外,它还区分大小写(str_replace vs str_ireplace)这意味着我可以通过混合使用大小写字母轻松绕过它。它还只检查查询字符串,对POST请求无效。

你告诉我们!有用吗?@mkaatman可能有用吗?我的意思是,当用户键入myurl.com/page.php?id=phpinfo()…但如果我没有这个密码,什么都不会发生too@RickJoe这是我有生以来第一次看到它