网站开发 - php 像图片什么的只要路径对都会下载,那PHP源码会不会被下载?那像腾讯相册那样的照片加密是怎么实现的?

 mobiledu2502882843 发布于 2022-11-21 12:26

php 像图片什么的只要路径对都会下载,那PHP源码会不会被下载?那像腾讯相册那样的照片加密是怎么实现的?

3 个回答
  • 是否会下载,是通过如Apache Ngnix等服务器软件进行设置的。

    一般情况下,PHP文件都会被解析,但也不是所有。比如在上传文件夹,一般为了安全,会将其设置为不可解析。

    照片加密

    1. 获取照片时,后台首先通过权限认证,确认你是否有权限对该照片进行访问
    2. 如果有权限,后台返回照片的真实地址
    3. 如果没有权限,后台不返回照片的地址

    应该就是如此吧。

    2022-11-21 12:26 回答
  • 下载文件和要求PHP脚本渲染网页,对服务器而言都是等同的HTTP请求。

    服务器肯定会用扩展名识别文件类型,来决定原样下发文件内容,还是调用PHP解释器。一般不必担心PHP代码被下载下来。

    实际上真正的危险是反过来的:即用户上传一个PHP脚本到服务器,然后通过HTTP请求去试图执行之,从而获取运行服务器端代码的特权。所以对于带上传的应用,有以下各种防护方法:

    • 限制用户上传文件的扩展名
    • 约束文件名的可用字符
    • 不信任用户上传的名称,仅用checksum为文件名实际存入文件系统
    • 对于特定格式(图像等),校验内容本身是否有效

    一般会选择一种或几种方法实现。只要方案合适,服务器的安全是足够得到保障的。

    2022-11-21 12:26 回答
  • Apache:

    DirectoryIndex index.html index.php
    LoadModule php7_module modules/libphp7.so
    AddHandler application/x-httpd-php .php
    

    Nginx:

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_pass unix:/tmp/php-fpm.sock;
    }
    

    给Apache和Nginx配置好PHP支持后,访问PHP文件时,Apache和Nginx会把PHP请求交给PHP模块或PHP-FPM处理,然后把处理结果返回给浏览器,所以浏览器是不能下载到PHP源代码的.

    至于腾讯相册加密的照片,经过程序身份验证后才能显示和下载.

    <?php
    auth(); //用户身份认证
    header('Content-type: image/png'); //图片
    readfile($file_path); //PHP输出图片
    

    这些图片存储的目录可以不在网站目录里,这样用户是无法通过访问URL来读取这些图片的.
    如果在网站目录里,则需要配置Apache和Nginx拒绝访问这些目录:
    Apache 2.4 .htaccess:

    Require all denied
    

    Nginx:

    location ^~ /private/ {
        deny all;
    }
    
    2022-11-21 12:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有