我希望Liferay只允许登录用户发布请求,同时拒绝其他Post请求源,例如Postman等。
答案 0 :(得分:0)
有一点需要注意我不熟悉Liferay本身,我可以告诉你,在一般的Web应用程序中,你所要求的是不可能的。
让我们以最简单的形式考虑问题:
服务器是无状态的 - 也就是说,必须以原子方式考虑每个请求。没有持久连接,服务器上没有保留状态。
所以 - 让我们考虑一下浏览器发布POST时会发生什么:
服务器如何知道用户已登录?在大多数情况下,这是通过检查随请求发送的cookie并验证它是否正确来完成的 - 例如,加密签名。
现在让我们考虑邮递员的请求。通过邮递员提交的请求和通过浏览器提交的请求之间究竟有什么区别?的无即可。没有区别。检查和检索从浏览器发出的合法请求发送的cookie非常简单,并在伪造的Postman请求中包含这些标头。
让我们考虑你可以采取哪些措施来防止这种情况发生 1.设置并验证额外的cookie - 不会起作用,因为我们仍然可以像登录会话一样检索这些cookie 2.加密连接,以便无法通过线路捕获cookie,因为我可以从浏览器中捕获cookie 3.检查用户代理以确保它是由浏览器发送的 - 不会工作,因为我可以将标头欺骗为我想要的任何值 4.检查推荐人以确保请求来自我网站上的有效页面(这是跨站点请求伪造缓解的一部分) - 不会工作,因为我总是可以将推荐人欺骗到我想要的任何值 5.在页面中添加逻辑(JavaScript)以计算一些有效性令牌 - 因为我仍然可以读取JavaScript(它的客户端)并伪造我自己的令牌而无法工作
从Web系统的本质来看,这个问题是不可解决的。由于您(服务器/应用程序编写者)无法完全控制通信的双方,因此总是可以欺骗来自客户端的请求。您可以做的最好的事情是防止来自没有有效凭据的任意用户的任意请求。但是,包含正确安全令牌的任何请求必须才能被视为有效,无论是从浏览器/网页生成还是手工制作或通过其他应用程序制作。充其量,您将不必要地使您的应用程序复杂化,因为安全性没有显着改善。您可以阻止CSRF攻击和其他一些注入式攻击,但因为您作为客户端可以始终读取从服务器发送的任何内容,并且始终制定您自己的请求,您可以始终提供有效请求。
答案 1 :(得分:0)
你能准确地解释一下你想要完成什么吗?您是否尝试完全禁用访客访问,即使通过"有效"推荐人(实际提交表单的用户)或者您是否试图阻止来自其他推荐人的帖子请求?
如果您只是担心引荐来源伪造,可以在 portal-ext.properties 文件中设置以下属性。
auth.token.check.enabled = true
如果要删除访客角色的所有权限,只需进入门户网站的控制面板,进入配置,然后进入权限表。取消选中与来宾关联的整行。
应该这样做。如果你找不到这些权限,请发布你的确切Liferay版本。