我有一个使用 Solr 显示产品信息的网站,它通过 URL 进行管理。我很好奇如何阻止普通用户通过 URL 更新或删除我的 Apache Solr 文档。我想得到它,所以只有管理员可以提交这些查询。
我假设有一种方法可以让用户名和密码验证任意用户是管理员,从而允许 URL 请求修改数据。这很有用,但问题是我不希望网站 UI 中的用户在有人向 URL 输入查询时有机会看到登录消息。
有谁知道这个的解决方案/做过类似的事情?
1)一种解决方案是在不同的端口(例如 8081)上运行 SOLR,并让您的操作系统防火墙阻止对端口 8081 的请求,不包括您将用于管理管理员的机器的公共 IP,只允许您本地机器访问 8081 .
这是我在 CentOS 机器上的 IPTABLES 中使用的防火墙配置
-A 输入 -p tcp --dport 8081 -s 111.222.333.444 -j 接受
-A 输入 -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 模式,而具有管理员角色的用户将能够访问管理员 url 模式。
我建议使用 DIGEST 身份验证,因为 BASIC 身份验证很容易被攻击者欺骗。
向最终用户公开所有 SOLR 端点就像向用户开放数据库一样。我们有类似的要求,我们通过应用程序从最终用户那里获得 SOLR。
搜索仍然由 SOLR 提供支持,但所有请求和响应都通过应用程序进行代理/转换。
这有助于我们在应用层进行所有基于角色的授权,并且 SOLR 不需要知道用户角色。
因此,您的网站可以控制需要授权的操作、维护已登录用户的会话等。