当前位置: > 网络安全 > 黑客攻防 > DDoS攻击 >

从PHPDDOS源码来谈防御

时间:2015-02-25 01:20来源:linux.it.net.cn 作者:IT
完整的PHPDDOS的参考源码,是我在网上随便搜索得来。


我们来看看原理。


其实很简单,


就是设置一个文本不超时,然后不断的建立TCP链接,当然也存在UDP/SYN的方式,但是链接方式不重要,


看上面关键代码就是


set_time_limit(0);和$fp = fsockopen("tcp://$ipb",$portb,$errno,$errstr,0);


为什么说这是关键代码,因为这个是让脚本不超时,一个是打开socket,这是无疑是最关键的了。


这么说来似乎找到了解决办法。


1。让脚本超时,


2。不允许打开socket


那就来看看如何解决,


让脚本不允许设置为不超时很简单,1,把set_time_limit函数禁用,2,启用PHP的安全模式(safe_mode=on)


禁用socket函数可以把把socket模块直接全部禁用也可以禁用fsockopen函数,


建议,由于socket常用于发送邮件找回密码,因此建议开启直接开启安全模式,但是


这样的话,脚本每30秒超时一次,估计没有哪个“黑客”寂寞到每30秒去点一下开始DDOS。。。


附上开启安全模式对程序的影响。。


函数名 限制


dbmopen() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


dbase_open() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


filepro() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


filepro_rowcount() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


filepro_retrieve() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


ifx_* sql_safe_mode 限制(!= safe mode)


ingres_* sql_safe_mode 限制(!= safe mode)


mysql_* sql_safe_mode 限制(!= safe mode)


pg_loimport() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


posix_mkfifo() 检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


putenv() 遵循ini 设置的safe_mode_protected_env_vars 和safe_mode_allowed_env_vars 选项。请参考putenv() 函数的有关文档。


move_uploaded_file() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


chdir() 检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


dl() 本函数在安全模式下被禁用。


backtick operator 本函数在安全模式下被禁用。


shell_exec() (在功能上和backticks 函数相同) 本函数在安全模式下被禁用。


exec() 只能在safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用..。escapeshellcmd()将被作用于此函数的参数上。


system() 只能在safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用..。escapeshellcmd()将被作用于此函数的参数上。


passthru() 只能在safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用..。escapeshellcmd()将被作用于此函数的参数上。


popen() 只能在safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用..。escapeshellcmd()将被作用于此函数的参数上。


fopen() 检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


mkdir() 检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


rmdir() 检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


rename() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


unlink() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


copy() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。(on source and target )


chgrp() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


chown() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。


chmod() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。 另外,不能设置SUID、SGID和sticky bits


touch() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。


symlink() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。 (注意:仅测试target)


link() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。 (注意:仅测试target)


apache_request_headers()在安全模式下,以“authorization”(区分大小写)开头的标头将不会被返回。


header() 在安全模式下,如果设置了WWW-Authenticate,当前脚本的uid 将被添加到该标头的realm 部分。


PHP_AUTH 变量 在 安全模式下,变量PHP_AUTH_USER、PHP_AUTH_PW 和PHP_AUTH_TYPE
在$_SERVER 中不可用。但无论如何,您仍然可以使用REMOTE_USER,来获取用户名称(USER)。(注意:仅PHP 4.3.0
以后有效)


highlight_file(), show_source() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。 检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。 (注意,仅在4.2.1版本后有效)


parse_ini_file() 检查被操作的文件或目录是否与正在执行的脚本有相同的UID(所有者)。检查被操作的目录是否与正在执行的脚本有相同的UID(所有者)。 (注意,仅在4.2.1 版本后有效)


set_time_limit() 在安全模式下不起作用。


max_execution_time 在安全模式下不起作用。


mail() 在安全模式下,第五个参数被屏蔽。(注意,仅自PHP 4.2.3 起受影响)

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容