Liferay 如何拒绝外部post请求?

Liferay 如何拒绝外部post请求?,liferay,liferay-6,Liferay,Liferay 6,我希望在Liferay中只允许登录用户进行post请求,同时拒绝其他post请求源,例如来自Postman的请求。我对Liferay本身并不熟悉,但我可以告诉您,在一般Web应用程序中,您所要求的是不可能的 让我们以最简单的形式来考虑这个问题: Web应用程序向服务器发出POST请求 服务器应该只允许来自使用Web应用程序的登录用户的请求 服务器是无状态的——也就是说,每个请求都必须以原子方式考虑。服务器上没有持久连接,也没有保留任何状态 所以,让我们考虑当浏览器发帖子时会发生什么: 将打开到服

我希望在Liferay中只允许登录用户进行post请求,同时拒绝其他post请求源,例如来自Postman的请求。

我对Liferay本身并不熟悉,但我可以告诉您,在一般Web应用程序中,您所要求的是不可能的

让我们以最简单的形式来考虑这个问题:

  • Web应用程序向服务器发出POST请求
  • 服务器应该只允许来自使用Web应用程序的登录用户的请求
  • 服务器是无状态的——也就是说,每个请求都必须以原子方式考虑。服务器上没有持久连接,也没有保留任何状态

    所以,让我们考虑当浏览器发帖子时会发生什么:

  • 将打开到服务器的HTTP连接
  • 发送HTTP头,包括以前由服务器设置的任何站点cookie,以及特殊头,如用户代理和引用
  • 表单数据将发布到服务器
  • 服务器处理请求并返回响应
  • 服务器如何知道用户已登录?在大多数情况下,这是通过检查随请求发送的cookie并验证其正确性来完成的,例如,加密签名

    现在让我们考虑邮递员的要求。通过邮递员提交的请求和通过浏览器提交的请求到底有什么区别。没有区别。从浏览器中检查和检索根据合法请求发送的cookie非常简单,并且在伪造的邮递员请求中包含这些头

    让我们考虑一下你可以做些什么来防止这种情况。 1.设置并验证额外的Cookie-将不起作用,因为我们仍然可以检索这些Cookie,就像我们在登录会话中所做的那样 2.加密连接,使Cookie无法通过网络捕获-无法工作,因为我可以从浏览器捕获Cookie 3.检查用户代理以确保它是由浏览器发送的-不会工作,因为我可以将标题伪造为我想要的任何值 4.检查推荐人以确保请求来自我的站点上的有效页面(这是跨站点请求伪造缓解措施的一部分)-不会起作用,因为我可以随时将推荐人欺骗到我想要的任何值 5.将逻辑(JavaScript)添加到页面中以计算一些有效性令牌-将不起作用,因为我仍然可以读取JavaScript(它是客户端的)并伪造我自己的令牌

    就Web系统的本质而言,这个问题是无法解决的。由于您(服务器/应用程序编写器)无法完全控制通信的双方,因此总是有可能欺骗来自客户端的请求。您所能做的最好的事情是防止来自没有有效凭据的任意用户的任意请求。但是,任何包含正确安全令牌的请求必须被认为是有效的,无论它是从浏览器/网页生成的,还是手工制作的,还是通过其他应用程序生成的。充其量,您将不必要地使应用程序复杂化,因为安全性没有显著提高。您可以防止CSRF攻击和其他一些注入类型的攻击,但由于您作为客户端可以始终读取服务器发送的任何内容,并且可以始终编写自己的请求,因此您可以始终提供有效的请求

    澄清 你能确切地解释一下你想完成什么吗?您是否试图完全禁用来宾访问,即使是通过“有效”的推荐人(实际提交表单的用户)访问,还是试图阻止来自其他推荐人的post请求

    如果您只是担心引用者伪造,您可以在portal-ext.properties文件中设置以下属性

    auth.token.check.enabled = true
    
    如果要删除来宾角色的所有权限,只需进入门户的控制面板,进入配置,然后进入权限表。取消选中与来宾关联的整行


    应该这样做。如果您无法找到这些权限,请发布您的确切Liferay版本。

    您能与我们分享您迄今为止所做的工作吗?