我有一个使用Solr显示产品信息的网站,它通过URL进行管理。我很好奇我将如何阻止普通用户通过URL更新或删除我的Apache Solr文档。我希望得到它,只有管理员可以提交这些查询。
我认为有一种方法可以让用户名和密码验证任意用户是否为管理员,从而允许URL请求修改数据。这很有用,但问题是我不希望网站用户界面中的用户甚至有机会在有人向网址输入查询时看到登录消息。
有没有人知道这个/做过类似事情的解决方案?
答案 0 :(得分:1)
1)一种解决方案是在不同的端口(例如8081)上运行SOLR,并让您的操作系统防火墙阻止对端口8081的请求,不包括您将用于管理管理员的机器的公共IP,只允许本地机器访问8081.
这是我在CentOS机器上的IPTABLES中使用的防火墙配置
-A INPUT -p tcp --dport 8081 -s 111.222.333.444 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8081 -j DROP
为了进一步保护管理员,我使用DIGEST auth-method将以下安全约束添加到web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<url-pattern>/admin.html</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin images</web-resource-name>
<url-pattern>*.png</url-pattern>
</web-resource-collection>
<auth-contraint>
<role-name>admin</role-name>
</auth-contraint>
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>secure</realm-name>
</login-config>
2)另一种选择是为两个不同的角色(即用户和管理员)添加上述安全约束。具有用户角色的用户将只能访问选择的url-pattern,具有admin角色的用户将能够访问admin url-pattern。
我建议使用DIGEST身份验证,因为攻击者很容易欺骗BASIC身份验证。
答案 1 :(得分:0)
将所有SOLR端点暴露给最终用户就像向用户开放数据库一样。我们有类似的要求,我们通过应用程序从最终用户处获得SOLR。
搜索仍然由SOLR提供支持,但所有请求和响应都通过应用程序进行代理/转换。
这有助于我们在应用程序层上执行所有基于角色的授权,并且不需要让SOLR了解用户角色。
因此,您的网站可以控制哪些操作需要授权,维护已登录用户的会话等。