学习与交流:
最新版phpstorm,在这里获取全家桶账号,支持版本升级 链接:https://web.52shizhan.cn/activity/xqt8ly 如果你的网站仍然使用777作为权限,那么你的服务器将向任何人开放,任何人都可以执行目录中的脚本。
我见过一些别人的外包项目,整个项目的权限设置为777,虽然极其可怕,但是黑客可以上传文件到任意目录并执行文件。
这很糟糕。 一些程序员可以使用一些工具来扫描漏洞。 比如很多php程序员在简历中都说自己破解过php,植入过侧门。 弱点是,很多网站都可以获得Shell。
为了安全部署PHP代码,需要注意以下几点:
1 文件权限:确保代码文件和目录的权限设置正确,不要授予过多的权限,以防止受害者使用;
2 数据库连接:尽量使用PDO或mysqli连接形式,并使用预处理语句绑定连接字符串中的参数,避免SQL注入攻击;
3密码安全:尽可能采用加密方式存储密码,并定期修改;
4、文件上传:对于上传的文件,需要限制上传的文件类型和大小php加密工具,严格控制上传的目录权限;
5.系统更新:及时更新PHP版本及相关扩展库,防止已知漏洞的攻击。
下面是 PHP 代码安全部署的示例:
1 确保代码目录权限设置为755,文件权限设置为644;
2、代码中使用PDO连接数据库,并使用预处理语句绑定参数;
3 对于要存储的密码,使用密码哈希函数进行加密;
4 对于上传的文件,限制上传的类型和大小,并将上传的文件连接到非Web目录;
5 定期更新PHP版本及相关扩展库。
示例代码如下:
<?php
// 使用 PDO 连接数据库
$dsn = 'mysql:host=localhost;dbname=test';
$user = 'root';
$password = '123456';
$pdo = new PDO($dsn, $user, $password);
// 使用预处理语句绑定参数
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// 使用密码哈希函数进行加密
$password = '123456';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// 限制上传的类型和大小,并将上传的文件移动到非 Web 目录下
$allowedTypes = ['jpg', 'jpeg', 'png'];
$maxSize = 1024 * 1024; // 1MB
$uploadDir = '/var/www/uploads/';
if ($_FILES['file']['size'] > $maxSize || !in_array(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION), $allowedTypes)) {
// 处理上传错误
} else {
$fileName = uniqid() . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
move_uploaded_file($_FILES['file']['tmp_name'], $uploadDir . $fileName);
}
// 定期更新 PHP 版本和相关扩展库注意,这只是一个基本示例,实际部署需要根据具体情况进行调整和优化。
上传权限
我们的一些小型程序需要上传图片或文件到服务器(但建议上传到OSS或七牛等第三方存储解决方案)。
为了防止上传的程序被恶意攻击,我们可以拒绝在Nginx或Apache中运行php脚本
在Nginx中,一般会采取以下措施来防止上传的程序受到恶意程序的攻击:
1 限制上传的文件类型:可以通过在nginx.conf文件的http部分添加以下配置来实现:
http {
...
# 允许上传的文件类型
client_max_body_size 10m;
client_body_buffer_size 128k;
client_body_timeout 60s;
client_header_timeout 60s;
keepalive_timeout 75s;
send_timeout 60s;
# 禁止上传的文件类型
location /upload {
if ($request_filename ~* .*.(php|php5|pl|cgi|py|jsp|asp|htm|shtml|sh|cgi-bin)) {
return 403;
}
}
...
}上述配置中,client_max_body_size表示上传文件的最大大小,client_body_buffer_size表示请求body缓冲区的大小,client_body_timeout表示请求body超时,client_header_timeout表示请求头超时,keepalive_timeout表示保活超时,send_timeout表示发送数据超时。 location配置用于匹配指定路径的请求。 上述配置中php加密工具,匹配的是/upload路径的请求。 如果请求中包含严格禁止上传的文件类型,将返回403 Access Forbidden。
2 限制上传文件大小:可以通过设置client_max_body_size来限制上传文件大小。 喜欢:
location /upload {
client_max_body_size 10m;
}上述配置表示上传文件的大小限制为10M。
3、检测和过滤上传文件:在上传文件后台处理程序中对上传文件进行检测和过滤,避免上传恶意程序到服务器。
4 定期检查服务器安全:定期检查服务器安全漏洞、升级服务器软件和操作系统、加强服务器防火墙设置等。
需要注意的是,上述措施只是部分防御措施,很难完全保证服务器的安全。 最好在代码开发过程中牢记安全性,但定期进行安全测试和检测。
参考链接:
以上就是本文的全部内容,希望各位程序员努力提高个人技能。 最后,小编温馨提醒:每晚读书5分钟,每晚学习一点,每晚进步一点。
发表评论