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

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

WBOY
WBOYOriginal
2016-06-06 20:31:501171browse

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

回复内容:

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

Apache:

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

Nginx:

<code>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;
}
</code>

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

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

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

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

<code>Require all denied
</code>

Nginx:

<code>location ^~ /private/ {
    deny all;
}
</code>

下载文件和要求PHP脚本渲染网页,对服务器而言都是等同的HTTP请求。

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

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

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

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

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

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

照片加密

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

应该就是如此吧。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn