大家好我在perl脚本中有这行代码,我允许用户将5秒麦克风录音上传到我的服务器。执行录制的闪光灯会自动将麦克风限制为5秒,然后将录制内容发送到我的服务器。
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
现在我的问题是,如果有人想要恶意,他们可以使用内部内存,带宽和可能的缓冲区溢出直接发布到我的服务器脚本。有没有办法防止有多少信息来自用户?
我在读取行之前尝试过这个,但我不完全确定这是正确的方法。有任何想法吗?感谢。
if ($ENV{'CONTENT_LENGTH'} > 100000) {
#then return some error message / exit
}
编辑和解决我的问题:
use CGI qw/:standard/;
use CGI::Carp 'fatalsToBrowser';
$CGI::POST_MAX=1024 * 100; # max 100K posts
#$CGI::DISABLE_UPLOADS = 1; # no uploads
$uploaded_file = param( 'POSTDATA' );
if (!$uploaded_file && cgi_error()) {
print header(-status=>cgi_error());
exit 0;
}
我要感谢你们所有人的快速回应(赞成所有人),但我必须给第一个发布正确链接的人提供正确答案,尽管他们没有努力写任何东西。我想这只是公平的吗?你们有什么想法,请在下面发表评论。
答案 0 :(得分:3)
你说它是一个Perl脚本,但没有提到Perl CGI.pm模块。如果您使用该模块(我推荐),则对拒绝服务保护的支持有限。例如,您可以设置:
$CGI::POST_MAX = 100000;
如果出现任何过大的帖子,和CGI.pm将退出您的脚本并显示错误。
在手册页中有一个decent discussion如何避免拒绝服务攻击。
答案 1 :(得分:2)
有没有办法阻止用户提供多少信息?
简单地说,没有。因为一旦它到达你控制中的东西(服务器),它就已经来自用户了。请参阅denial of service attack。
这主要取决于滤除噪音的地方。例如:
真正恶意的用户可以提供足够严重的攻击,使您的服务器不再是问题。你的ISP的机架可以被软管。
答案 2 :(得分:1)