一个下载地址防盗的判断 大牛进来看下!
两个网站 一个主站 一个上传用的子站
主站的download.php 为下载页面
子站的down.php为下载链接
必须通过download.php的下载点击链接才能下载
为了防止用户直接访问 子站/down.php?fileid=1能下载到该文件 做了下面的判断
download.php 增加一个哈希值
$hash = strtoupper(md5('downloadkey'.date('ymdh')));
down.php 也增加一个哈希值
$hash2 = strtoupper(md5('downloadkey'.date('ymdh')));
down.php判断
if($hash<>$hash2){ header("Content-Type: text/html; charset=utf-8"); echo '文件ID: '.$file_id.'<br>'; echo '['.$file_name.'] 文件地址已过期,请返回下载地址重新下载。<br><br>如果仍然出现此问题,请联系管理员<br><br>'; if($pd_gid==1){ echo '<br><br>---------- 以下内容 管理员可见 ---------- <br>'; echo '文件HASH:<font color=blue>'.$hash.'</font><br><br><br>'; echo '文件HASH2:<font color=blue>'.$hash2.'</font><br>'; }
当时这样会有一个问题 就是当用户在20:59:59''的时候访问的下载页面,然后点击下载了
但是点击之后时间是21:00:01了,这样就造成了哈希值不一样,然后就不能下载,要返回重新下载一下就可以
如何解决呢。。
回复讨论(解决方案)
怎么木有人呢!
上面的是用时间来生成哈希值的 还有其他方法能防止吗
生成的 $hash 宜通过 cookie 传递并设有不太长的有效期,同时保存于 session 中
检查时不重新生成,而只检查 cookie 中是否有,并且与 session 中的对比
就同校验码一样
生成的 $hash 宜通过 cookie 传递并设有不太长的有效期,同时保存于 session 中
检查时不重新生成,而只检查 cookie 中是否有,并且与 session 中的对比
就同校验码一样
找到个简单点的方法
if(strpos($_SERVER['HTTP_REFERER'],'http://www.domain.com') == 0)
通过判断来路地址判断 不知道是否可行
生成的 $hash 宜通过 cookie 传递并设有不太长的有效期,同时保存于 session 中
检查时不重新生成,而只检查 cookie 中是否有,并且与 session 中的对比
就同校验码一样
找到个简单点的方法
if(strpos($_SERVER['HTTP_REFERER'],'http://www.domain.com') == 0)
通过判断来路地址判断 不知道是否可行
这个可以伪造
HTTP_REFERER 是可以伪造的
你可以参考下basic认证。
反过来,模拟浏览器也是一个课题。所以这是个道高一尺魔高一丈的问题。防盗只能防止正常的盗链,对于使用程序模拟浏览网页的话没法绝对防止。
所以建议防君子不防小人,使用referer防盗链。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Alipay Php ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...
