您的位置:首页 > 编程语言 > Python开发

webdriver+python下拉框的处理方式

2015-03-11 16:39 274 查看
四 重定向和文件
另一类安全问题是围饶在web应用里重定向和文件的使用。

4.1 重定向
web应用里的重定向是一个被低估的craker工具:它不仅可以让用户掉入一个陷进网站,而且还可以创造一个完备的攻击。

当用户被允许由一个URL重定向的时候,它由可能就是个漏洞。最明显的攻击是将用户重定向到一个和原始页面一模一样的假页面。这个所谓的‘钓鱼攻击’通过给用户发送一封包含正常的不让人起疑的链接的email, 通过XSS方式往web应用里注射这个恶意链接或者把链接放到一个虚假的网站(域名看起来差不多,页面也相同的站点)。它是毫不让人怀疑的,因为这个链接的起始URL是这个正常的web应用,指向恶意站点的URL都被隐藏在重定向参数里:http://www.example.com/site/redirect?to= www.attacker.com. 这里由个例子:


def legacy


redirect_to(params.update(:action=>'main'))


end

如果用户访问legacy这个action,将会被重定向到mail action。这样做的意图是为了维护legacy的参数,并把这些参数传到main action。 但是,如果它包含了一个host key,就会被攻击者利用。

http://www.example.com/site/legacy?param1=xy¶m2=23&host=www.attacker.com

如果它在url的尾部, 将很难被注意到,用户就被神不知鬼不觉的重定向到了攻击者的页面。一个简单的对策是,在legacy action里只包含预期的参数(白名单的办法,不是取消所有意向不到的参数)。如果你重定向到一个网址,你需要用白名单或是正则表达式检查它。

4.1.1 Self-contained XSS(自载的xss攻击)

另一个重定向和self-contained XSS 攻击是通过firefox和opera里使用的一种数据协议。该协议直接在浏览器里显示其内容,可以使任何内容,从html,javascript到图片。(这不是一个漏洞,而是一个功能)


data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K

这个例子是一个Base64编码的显示简单消息框的javascript。在一个重定向的URL里,一个攻击者能用它里面的恶意代码重定向这个url。
更详细的攻击原理可以参看这里:http://www.gnucitizen.org/blog/self-contained-xss-attacks/
对策:do not allow the user to supply (parts of) the URL to be redirected to.(说实话,这里我没看明白)

4.2 文件上传
- 确保文件上次不覆盖重要的文件,和同步的媒体文件进程。

很多web应用允许用户上传文件,用户可以选择的文件名字,应该随时被过滤,因为攻击者可以用恶意的文件名覆盖服务器上任意文件。如果你在/var/www/uploads存储上传文件,用户输入一个文件名:../../../etc/passwd, 它可能覆盖一个重要文件。

当过滤用户输入的文件名时,不要试图去删除恶意的部分。想一想,如果去掉所有的../ , 攻击者输入.. .. //, 那么结果就成了../。最好是用白名单的方式,用一套可接受的字符去检查文件名的有效性。一旦它不是一个有效的文件名,则拒绝它(或替换它),但是不删除它们。这有一份来自attachment_fu插件的文件名清单:


def sanitize_filename(filename)


returning filename.strip do |name|


# NOTE: File.basename doesn't work right with Windows paths on Unix


# get only the filename, not the whole path


name.gsub! /^.*(\\|\/)/, ''


# Finally, replace all non alphanumeric, underscore


# or periods with underscore


name.gsub! /[^\w\.\-]/, '_'


end


end

一个重大的缺陷是,同步处理文件上传(比如attachment_fu插件处理多个图片上传),使其易受dos攻击。攻击者可以从很多电脑同时启动图像上传,从而增加服务器负载,最终让服务器崩溃。

要解决这一点,最好是异步处理媒体文件。Save the media file and schedule a processing request in the database. A second process will handle the processing of the file in the background.

4.3 Executable code in file uploads
- 上传文件里的代码在特定的环境下可能被执行,如果Rails / Public 目录是Apache的主目录,请不要把文件上传到此。

如果一个攻击者上传个file.cgi, 有人下载这个文件,代码就会被执行。

4.4 File downloads
- 确保用户无法下载任意文件。

正如你必须过滤上传的文件名一样,对下载文件也应该这样做。下面这个send_file()方法发送文件到客户端,如果你用了一个文件名没有过滤, 用户输入什么都可以被下载。


send_file('/var/www/uploads/' + params[:filename])

简单的通过“../../../etc/passwd”这样一个文件名去下载服务器的登陆信息。简单的解决方式是,检查请求的文件是在允许的目录下:


basename = File.expand_path(File.join(File.dirname(__FILE__), '../../files'))


filename = File.expand_path(File.join(basename, @file.public_filename))


raise if basename =!


File.expand_path(File.join(File.dirname(filename), '../../../'))


send_file filename, :disposition => 'inline'

另外一个方式是在数据库里存储文件名。这种方式可以避免上传文件的代码被执行。attachment_fu用的就是类似的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: