注入漏洞代码及其分析
复制代码代码如下所示:
< PHP
功能自定义
错误(错误errstr美元,美元,美元errfile美元,errline)
{
回声错误号:{ $ errno },在errfile美元errline美元的错误;
(死亡);
}
set_error_handler(自定义错误
getfilter美元=|(和|或) B +(> < | | = |在|像)| / *。+ * / | < *
脚本 B | 预算
执行情况 B |联盟。+选择|更新。+ |插入 +到+价值|(选择|
删除)。+ |(
创建|改变|滴|截断) +(表|数据库);
美元再次= B(和|或) B. {或}(= | > | < | 本 B | Blike B)| / *,+ * / | < *脚本 B | 预算执行情况 B |联盟。+选择|更新。+ |插入 +到+价值|(选择|删除)+ |(创建。|改变|滴|截断) +(表|数据库)。
cookiefilter美元= B(和|或) B. {或}(= | > | < | 本 B | Blike B)| / *,+ * / | < *脚本 B | 预算执行情况 B |联盟。+选择|更新。+ |插入 +到+价值|(选择|删除)+ |(创建。|改变|滴|截断) +(表|数据库)。
功能stopattack(strfiltkey美元美元美元,strfiltvalue,arrfiltreq)
{
如果(is_array($ strfiltvalue))
{
strfiltvalue美元(美元strfiltvalue)=崩溃;
}
如果(preg_match( / 。arrfiltreq美元。 /
{
猛击(
运行IP:。_server美元{ remote_addr )。手术时间:。Strftime(% y %M - %:% H M:%s)。
操作页面:美元。_server {php_self ,提交
模式:美元。_server {request_method 。
打印结果通知:非法操作!;
出口();
}
}
foreach(_get美元美元美元价值的关键= >)
{
stopattack(美元,美元的价值,getfilter美元);
}
foreach(_post美元美元美元价值的关键= >)
{
stopattack(美元美元美元价值的关键,,后置);
}
foreach(_cookie美元美元美元价值的关键= >)
{
stopattack(美元,美元的价值,cookiefilter美元);
}
功能猛击($日志)
{
toppath美元=日志.htm;
TS = fopen(toppath美元美元,+);
作用是:将内容($ TS,$日志。 ;
Fclose($ TS);
}
>
SQL
分析
如果使用这个
函数,这个函数将绕过PHP的标准错误
处理,所以你可以说你定义了错误处理
程序(死亡())。
其次,如果有代码之前执行一个
用户定义的程序错误,当时未执行,因此用户不会使用错误处理由用户自己编写的程序。 U3000
然后,PHP中有一套错误处理机制。它可以在PHP的错误处理的set_error_handler(),或使用trigger_error()函数抛出一个错误。
的set_error_handler()函数
设置用户定义的错误处理功能。该功能用于创建用户自己的错误在运行过程中的处理
方法。它需要创建一个错误处理函数的第一,然后设定误差水平。 U3000
使用:
复制代码代码如下所示:
功能自定义错误(错误errstr美元,美元,美元errfile美元,errline)
{
回声的错误代码:{ } { errstr美元与美元},r,n ;
编码错误的回声{ $ errfile }
文件行:{ $ errline } r
;
PHP的回声版本
( /死亡);
}
set_error_handler(自定义错误
在这个函数中,您可以做任何事情,包括错误和日志文件的
详细内容的
格式化输出。
复制代码代码如下所示:
功能猛击($日志)
{
toppath美元=日志.htm;
TS = fopen(toppath美元美元,+);
作用是:将内容($ TS,$日志。 ;
Fclose($ TS);
}
自定义错误处理函数必须有这四个
输入变量errno errstr美元,美元,美元,美元errfile,errline。
我是一个常数,代表误差水平。它也有一个整数集合和对应,但它通常使用的字符串值来表示,因此,语义更好。例如,e_warning,与4的二进制掩码,表示警告
消息。
接下来,这个功能是通过set_error_handler作为回调
参数。这可以在PHP
本地错误处理功能。应该指出的是,这种托管不
管理所有
类型的错误,如e_error,e_parse,e_core_error,e_core_warning,e_compile_error,e_compile_warning,和e_strict.these错误部分将在最原始的
显示,或不。
StopAttack()函数写的正则表达式和呼叫猛击()()的日志文件,通过传递后,得到的,饼干,和调用猛击()。
复制代码代码如下所示:
exec_commond美元=(的| S)*(exec(的| +)+(S | x)P W +)(的| S)*;
simple_xss美元=(的| S)*((% 3C)|)*(的| );
eval_xss美元=(的| S)*((65)| E)( S)*((76)| V)( S)*(% 61)(一)| 的)*(% 6c))*;
image_xss美元=(的| S)*((% 3C)|)*(的| );
script_xss美元=(的| S)*((73)| S)*((63)| C)( S)*(72)| R)×(69)×(69)×;
sql_injection美元=(的| S)*((27)|(')|(% 3D)|(=)|( /)|(% 2F)|()|((22)|(- | -){ 2 })|(占23)|(% 3b)|(;))+(的| S)*;
当HP遇到错误时,它给出了错误脚本的
位置、数量和
原因,许多人说这没什么大不了的,但是揭示实际
路径的后果是不可想象的。一些入侵者,这个信息是非常重要的,但事实上,有很多的
服务器,有这方面的问题。一些
网络管理员只需设置display_errors在PHP
配置文件,但我认为这种方法太消极了。有时候,我们需要PHP返回错误信息,它可以调试。还需要提供给用户,甚至
浏览其他
网页的时候,这是错误的。但set_error_handler(),这些矛盾
都是可以
解决的。