1

我有一个使用 Solr 显示产品信息的网站,它通过 URL 进行管理。我很好奇如何阻止普通用户通过 URL 更新或删除我的 Apache Solr 文档。我想得到它,所以只有管理员可以提交这些查询。

我假设有一种方法可以让用户名和密码验证任意用户是管理员,从而​​允许 URL 请求修改数据。这很有用,但问题是我不希望网站 UI 中的用户在有人向 URL 输入查询时有机会看到登录消息。

有谁知道这个的解决方案/做过类似的事情?

4

2 回答 2

1

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 身份验证很容易被攻击者欺骗。

于 2013-08-13T14:34:30.060 回答
0

向最终用户公开所有 SOLR 端点就像向用户开放数据库一样。我们有类似的要求,我们通过应用程序从最终用户那里获得 SOLR。

搜索仍然由 SOLR 提供支持,但所有请求和响应都通过应用程序进行代理/转换。

这有助于我们在应用层进行所有基于角色的授权,并且 SOLR 不需要知道用户角色。

因此,您的网站可以控制需要授权的操作、维护已登录用户的会话等。

于 2013-08-13T00:44:18.750 回答