Jon*_*nas 17 security image hotlinking access-protection
我想创建一个包含许多图像的网站.但我想防止直接访问图像,例如直接链接到图像而无需访问网站.
这样做的首选方法是什么?有利有弊的替代方案是什么?
我有一些想法(我不知道它们是否可行):
也许这在许多网站上都没有实践过?例如,我试图访问Facebook上的私人照片,但没有登录,但我仍然可以访问照片.
该平台可能是一台带有NginX和PHP的Ubuntu机器.
Mar*_*ens 20
您将img元素链接到php文件.此文件检查用户是否具有正确的权限,如果是,则可以发回img响应.
<img src="url/LoadImg.php?id=1337" alt="" />
Run Code Online (Sandbox Code Playgroud)
仍然有权限的人可以下载图像并将其提供给其他人(网站空间/邮件/其他).为了让它更难以窃取它你可以禁用右键单击图像,但仍然是一个知道一点关于http的用户不应该有任何问题来窃取它.您可以在图像上放置签名(例如您的网站的徽标/名称),以便人们可以看到您在哪里来源.这可以用php完成.
如果你想变得有趣,你可以设置一个其他图像(色情很好用于此:P)如果链接来自其他页面则发送:P
.htaccess
使用以下行在站点文件夹中添加一个简单文件
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.your-domain\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www\.your-domain\.com$ [NC]
RewriteRule .*\.(wav|swf|jpg|jpeg|gif|png|bmp|js|css)$ - [F,NC,L]
Run Code Online (Sandbox Code Playgroud)
请注意我还添加js
和css
文件,即使我认为这是对的bizzare找人谁试图刮他们.
小智 6
您可以使用htaccess和users ip动态保护文件夹.
使用以下行将.htaccess文件添加到images文件夹:
order deny,allow
deny from all
Run Code Online (Sandbox Code Playgroud)
然后使用PHP将用户ip插入到htaccess文件中,当他们登录时如下:
<?
$ip = $_SERVER['REMOTE_ADDR'];
if (!filter_var($ip, FILTER_VALIDATE_IP)) exit();
$file = $_SERVER["DOCUMENT_ROOT"].'/YOUR_IMAGE_FOLDER/.htaccess';
$current = file_get_contents($file);
$current .= "allow from ".$_SERVER['REMOTE_ADDR']." #".$_SESSION['id']."\n";
file_put_contents($file, $current);
?>
Run Code Online (Sandbox Code Playgroud)
该文件夹将被阻止任何未登录的IP.
请注意,我检查了ip是否有效.重要的是,您不能让用户将自己的代码注入到htaccess文件中.
另请注意,我将用户ID放在htaccess文件中ip右侧的注释中.当用户注销时,您可以搜索htaccess文件并删除用户的IP.
您可以在每个请求上更新此信息,以防止使用动态ips的用户被启动.
我在整个成员区域使用这种方法,这是一个很好的附加安全层.只需确保将日志放在members文件夹之外的脚本中.
归档时间: |
|
查看次数: |
31890 次 |
最近记录: |