asc*_*bol 3 security testing pyramid
是否有推荐的方法来测试Pyramid应用程序中的安全设置?更具体地说,我正在使用路线和自定义路线工厂.使用细粒度ACL,安全设置会在不同位置进行拆分:配置设置,工厂,@ view_config中设置的权限以及视图内部权限的事件显式检查.
单元和功能测试页面(http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/testing.html)似乎没有表明测试用户A是否只能查看和修改数据的方法他被允许.
这是功能测试.Webtest可以保留会话cookie,以便您可以使用它来登录并以用户身份访问各个页面.
myapp = pyramid.paster.get_app('testing.ini')
app = TestApp(myapp)
resp = app.post('/login', params={'login': 'foo', 'password': 'seekrit'})
# this may be a redirect in which case you may want to follow it
resp = app.get('/protected/resource')
assert resp.status_code == 200
Run Code Online (Sandbox Code Playgroud)
至于仅测试应用程序的某些部分,您可以使用自定义(或仅使用自定义组查找器)覆盖身份验证策略.
def make_test_groupfinder(principals=None):
def _groupfinder(u, r):
return principals
return _groupfinder
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用此函数来模拟各种主体.但是,如果您的应用程序也依赖于authenticated_userid(request)任何地方,则不会处理用户标识.为此,您必须使用虚拟策略替换身份验证策略.
class DummyAuthenticationPolicy(object):
def __init__(self, userid, extra_principals=()):
self.userid = userid
self.extra_principals = extra_principals
def authenticated_userid(self, request):
return self.userid
def effective_principals(self, request):
principals = [Everyone]
if self.userid:
principals += [Authenticated]
principals += list(self.extra_principals)
return principals
def remember(self, request, userid, **kw):
return []
def forget(self, request):
return []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |