我在ElasticBeanstalk上部署了Spring Boot应用程序。我即将开始Beta版测试,因此还没有多少人知道应用程序URL。昨天我在日志文件中发现从我的loadByUsername
实现中有人调用了UserDetailsService
方法。关键是当前没有任何其他日志。如果该用户尝试登录,我会找到有关登录方法调用和Authentication Success/Fail Handler
的信息。因此,我假设该用户使用了一些Spring或Tomcat漏洞。所以有两个问题:
我使用Spring Boot 1.5.8。我认为值得提及的是,几天前我在日志中发现有人试图调用一些通用名称,例如phpMyAdmin,/ api / admin,wp-admin等。在所有情况下,服务器均返回404。
public class UserDetailsManager implements UserDetailsService {
@Autowired
private static final Logger LOG;
@Autowired
private UserDao userDao;
@Override
public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
LOG.debug("Load by username: {}", login);
return userDao.getByLogin(login).map(user -> new CustomUser(user.getUsername(), user.getPassword()))
.orElseThrow(() -> new UsernameNotFoundException("User not found for login " + login));
}
}
修改:
我发现用户是否不使用Spring Security / login进行身份验证,而是调用任何受保护的URL和基本身份验证,Spring省略了身份验证处理程序。这就是为什么没有其他日志的原因。
在nginx日志中,我发现来自此User-Agent
的呼叫:https://github.com/robertdavidgraham/masscan
。因此,现在唯一的问题是一些随机人士如何了解我的网站?是否有新创建的Cloudfront网址的注册表?
答案 0 :(得分:1)
所以现在唯一的问题是一些随机的人如何了解我的网站?是否有新创建的Cloudfront网址的注册表?
否,但是亚马逊使用的地址范围是众所周知的,如果您进入了用户代理标识的GitHub项目,则会看到以下内容:
TCP端口扫描程序,异步发送SYN数据包,在5分钟内扫描整个Internet。
换句话说,某个脚本小子正在探测您的网站。
您的 real 问题应该是“我网站上的哪个控制器称为此服务方法,以及哪个URL触发了该控制器?”但这是您只能回答的问题,因为只有您知道网站的结构。
但是,还有一件事:
我发现用户是否不使用Spring Security / login进行身份验证,而是调用任何受保护的URL和基本身份验证,Spring会省略身份验证处理程序。
身份验证只是保护您的网站的第一步。 授权是第二个也是更重要的部分,看来您还没有实现。