- SMB服务 - 默认端口为139和445,这是一个Windows共享服务,但它容易受到攻击,因此应该限制访问权限。
- RPC服务 - 默认端口为135,这是Windows系统中的远程过程调用服务,但它容易受到攻击,应该限制访问权限。
- SNMP服务 - 默认端口为161和162,这是一个用于监控网络设备的服务,但它容易受到攻击,因此应该限制访问权限。
- TFTP服务 - 默认端口为69,这是一个轻量级文件传输服务,但它不安全,因为它在明文中传输文件和密码。
以上服务和端口应该被关闭或限制访问权限,以提高系统的安全性。
以下是一些常见的 Windows 服务器安全设置,以及操作示例。
- 更新操作系统和应用程序
首先,确保操作系统和所有应用程序都是最新的,以防止已知漏洞被利用。在 Windows 服务器上,可以使用以下步骤检查更新:
- 打开“控制面板” -> “Windows Update”。
- 点击“检查更新”按钮,等待系统检查可用更新。
- 如果有更新可用,点击“安装更新”按钮。
- 重启服务器以完成更新安装。
- 启用防火墙
防火墙可以阻止未经授权的访问和攻击,因此应始终在 Windows 服务器上启用。以下是启用防火墙的示例步骤:
- 打开“控制面板” -> “Windows Defender 防火墙”。
- 点击“打开 Windows Defender 防火墙”按钮。
- 在“公用网络设置”和“专用网络设置”下,确保防火墙已启用。
- 如果需要,可以配置更详细的规则来控制应用程序和端口的访问。
- 禁用不必要的服务和端口
不必要的服务和端口可能会导致安全漏洞,因此应该尽可能禁用它们。以下是操作示例:
- 打开“运行”对话框(按“Win + R”键)。
- 输入“services.msc”并按回车键打开“服务”窗口。
- 禁用不必要的服务,例如“远程注册表”,“Telnet”等。
- 打开“控制面板” -> “Windows 防火墙” -> “高级设置”。
- 点击“入站规则”和“出站规则”,禁用不必要的端口,例如“TCP 端口 135”。
- 使用强密码
强密码可以降低被破解的风险。以下是一些创建强密码的示例规则:
- 包含数字、字母、符号。
- 长度至少 8 个字符。
- 不要使用字典单词或简单的序列(例如“123456”)。
- 禁用默认帐户
默认帐户(例如“Administrator”)容易受到攻击,因此应该禁用或重命名。以下是禁用默认帐户的示例步骤:
- 打开“计算机管理器” -> “本地用户和组” -> “用户”。
- 右键点击默认帐户,例如“Administrator”,并选择“属性”。
- 在“常规”选项卡中,选中“账户已禁用”复选框,然后点击“确定”按钮。
- 安装安全软件
安全软件可以帮助检测和防止恶意软件和攻击。以下是一些常见的安全软件:
- 防病毒软件,例如“Windows Defender”、“Norton”、“McAfee”等。
- 防火墙软件,例如“Comodo Firewall”、“TinyWall”等。
- 恶意软件检测和清除工具,例如“Malwarebytes”、“AdwCleaner”等。
4. 保护敏感信息:
使用 SSL 加密传输数据、使用加密算法存储密码和敏感数据、使用 HTTPS、禁用目录列表等。
存储密码时,应该使用密码哈希算法,而不是加密算法。哈希算法是一种单向转化算法,它可以将任意长度的输入数据转化为固定长度的输出数据。因此,哈希算法可以将密码转换为一个固定长度的哈希值。在进行验证时,将输入的密码进行哈希后,将结果与之前存储的哈希值进行比较即可。
下面是一个使用哈希算法进行密码存储和验证的示例(以 Python 语言为例):
```python
import hashlib
# 存储密码
password = "mypassword"
hashed_password = hashlib.sha256(password.encode()).hexdigest()
# 将哈希值存储到数据库或文件中
# 验证密码
input_password = "mypassword"
input_hashed_password = hashlib.sha256(input_password.encode()).hexdigest()
if input_hashed_password == hashed_password:
print("密码验证通过")
else:
print("密码错误")
在实际应用中,为了增强密码的安全性,可以在哈希算法的基础上加入 salt 或 pepper。salt 是一个随机字符串,可以与密码混合后再进行哈希,以增加破解密码的难度。pepper 是一个固定字符串,可以在哈希之前或之后加入,以增强密码的安全性。
在 IIS 中禁用目录列表:
1. 打开 IIS 管理器并选择要禁用目录列表的站点或应用程序;
2. 在功能视图中,双击“目录浏览”;
3. 在右侧的操作面板中,单击“禁用目录浏览”。
在 Nginx 中禁用目录列表:
1. 打开 Nginx 配置文件;
2. 在服务器或位置段中,添加以下指令:`autoindex off;`;
3. 保存并重新加载 Nginx 配置文件。
这些操作都会禁用该站点或应用程序中的目录列表。
## 5. 加强访问控制:
限制访问权限、使用两步验证、审计所有访问记录、及时移除不必要的账户和权限等。
要在 Python 中进行两步验证,需要使用一个第三方的库。Google Authenticator 是一个常用的两步验证库。
下面是一个简单的示例:
首先,需要安装 `pyotp` 库。
pip install pyotp
然后,可以使用以下代码来生成一个基于时间的一次性密码(TOTP)和一个密钥。
import pyotp
totp = pyotp.TOTP(pyotp.random_base32())
key = totp.now()
print("TOTP:", totp)
print("Key:", key)
接下来,在进行验证时,用户将输入他们从 Google Authenticator App 中获取的 TOTP,可以使用以下代码验证输入的 TOTP 是否正确。
import pyotp
totp = pyotp.TOTP("密钥")
user_input = input("请输入你从谷歌验证程序获得的6位代码:")
if totp.verify(user_input):
print("验证成功!")
else:
print("验证失败!")
这样就能够进行两步验证了。请注意,为了更好的安全性,建议尽可能地将密钥保存在安全的地方,并按照最佳实践来确保应用程序和服务器的安全性。
Node.js可以使用两步验证,通常使用TOTP或HOTP。
1. TOTP(基于时间的一次性密码):这是一种基于时间的算法,用户通过移动应用程序(如Google Authenticator)或硬件设备(如YubiKey)来生成动态的一次性密码。在Node.js中,可以使用“speakeasy”模块来实现TOTP。例如:
javascript
const speakeasy = require(‘speakeasy’);
const secret = speakeasy.generateSecret({length: 20});
// Send secret.issuer and secret.base32 to the client
const token = speakeasy.totp({
secret: secret.base32,
encoding: ‘base32’
});
// Verify token from client
const verified = speakeasy.totp.verify({
secret: secret.base32,
encoding: ‘base32’,
token: token,
window: 1
});
2. HOTP(基于计数器的一次性密码):这是一种基于计数器的算法,用户通过硬件设备来生成动态的一次性密码。在Node.js中,可以使用“notp”模块来实现HOTP。例如:
## 写在最后
**在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。**
需要完整版PDF学习资源私我
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**