我正在尝试编写一个脚本,以防止在我正在构建的网站中进行暴力登录尝试.逻辑是这样的:
sleep(10)然后向用户报告登录失败.在向同事解释这个问题时,我被问到如果黑客在一秒内发送了1000个请求,这将有多大帮助.前5个会立即返回,然后剩下的995只需要10秒吗?
我有一种潜在的怀疑,我不完全理解HTTP是如何工作的 - 甚至可能是上述情况,还是服务器将从一个客户端处理的并发请求数量有限制?
更好的解决方案是增加睡眠时间吗?
sleep($numRequestsInLast5Minutes - 5)
Run Code Online (Sandbox Code Playgroud)
所以前5个会很快,然后每个后续的都会增加睡眠.
我发现这个代码使用强力机制来解决背包问题(这主要是为了学习,所以不需要指出动态更有效).我得到了代码工作,并了解其中的大部分内容.最.这是问题:
我注意到这两个条件,我不知道它们是如何工作的以及为什么它们在代码中 - 我知道它们是至关重要的,因为我所做的任何改变都会导致算法产生错误的结果:
// if bit not included then skip
if (((i >> j) & 1) != 1) continue;
// if bit match then add
if (((bestPosition >> j) & 1) == 1)
{
include.Add(Items[j]);
}
Run Code Online (Sandbox Code Playgroud)
这是整个班级,以及我从主要方式调用它的方式:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KnapSack2
{
class BruteForce
{
public double Capacity { get; set; }
public Item[] Items { get; set; }
public Data Run()
{
int bestValue = 0;
int bestPosition = 0;
int size …Run Code Online (Sandbox Code Playgroud) 我最近意识到我丢失了密钥库的密码(或者密钥库可能以某种方式损坏了)
它一直给我错误:密钥库被篡改或密码不正确
我创建了一个(相当未经优化的)算法,通过让密码彻夜运行来强制密码.但是,我不确定有多少次密码尝试失败会锁定密钥库.
有谁知道这样的事吗?
更新
我设计的算法工作正常(我正在使用Java),但我意识到通常,只有当我按下回车键时,Keystore工具才会要求输入密码.但为了让蛮力工作,我希望它有一个开关并在同一行接受密码.可能吗?
我刚注意到我的服务器上有一个ssh暴力,它实际上应该被fail2ban禁止,但由于某种原因它并没有禁止它.大多数有fail2ban问题的人,似乎都有正则表达式的问题,这在这里似乎没问题.
jail.conf的一部分
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
findtime = 6000
bantime = 86400
Run Code Online (Sandbox Code Playgroud)
fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 0
| `- Total failed: 0
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 0
Run Code Online (Sandbox Code Playgroud)
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Running tests
=============
Use regex file : /etc/fail2ban/filter.d/sshd.conf
Use log file : /var/log/auth.log …Run Code Online (Sandbox Code Playgroud) 为什么分而治之的算法通常比蛮力运行得更快?例如,找到最接近的一对点.我知道你可以告诉我数学证明.但直觉上,为什么会这样呢?魔法?
从理论上说,"分而治之总是比蛮力更好"吗?如果不是,是否有任何反例?
目标是将10位从0到9放置,使得两个乘积之间的差异最接近零.(246是目前的最低分).
回到家里,我写了以下蛮力代码:
import time
from itertools import permutations
def form_number(x, y, z, a, b):
# not explicitly stated, but presume that leading zeroes are not allowed
if x == 0 or a == 0:
return 0
return ((100 * x) + (10 * y) + z) * ((10 * a) + b)
def find_nearest_zero(*args):
assert len(args) == 10
return form_number(*args[:5]) - form_number(*args[5:])
if __name__ == '__main__':
start = time.time()
count = 0
for p in …Run Code Online (Sandbox Code Playgroud) 我已经设置了我的数据库来记录每次失败的登录尝试.我以为我会将失败的尝试次数乘以0.05秒或者其他东西.就像是:
time_nanosleep(0, (50000000 * $failed_attempts ) );
Run Code Online (Sandbox Code Playgroud)
黑客用来猜测密码的更多尝试,每次检查需要更多时间.检查100张密码后,他必须在每次尝试之间等待5秒.
这是阻止暴力破坏的好方法吗?我通过IP识别用户.所以我猜你可以通过使用多个代理服务器或其他东西来强制执行应用程序,但除此之外,我认为这是一个好主意.你们有什么感想?
我是初学者C++程序员,为了扩展我的想法,我一直在尝试projecteuler.net上的一些问题.尽管学校对数学很感兴趣,但我发现自己会自动选择蛮力解决问题的方法,而不是寻找精简或优雅的东西.
这听起来像是一种糟糕的心态吗?我觉得这样做有点内疚,但也许有些快速和肮脏可以......
对加密数据的暴力攻击如何知道何时找到解密数据的正确密钥?有没有办法知道数据已被解密,除了让人看到它?如果它不是人类友好的数据怎么办?
我正在使用Node和Express JS构建一个网站,并希望限制无效的登录尝试.两者都可以防止在线破解并减少不必要的数据库调用.有什么方法可以实现这个?