security - छवियों के लिए सीधी पहुंच से कैसे बचाव करें?




image hotlinking (6)

मैं कई छवियों के साथ एक वेब साइट बनाना चाहूंगा लेकिन मैं छवियों के लिए सीधी पहुंच से रक्षा करना चाहूंगा, जैसे वेब साइट पर जाने के बिना चित्रों के प्रत्यक्ष लिंक।

ऐसा करने का पसंदीदा तरीका क्या है? और पेशेवरों और विपक्ष के साथ क्या विकल्प हैं?

मेरे पास कुछ विचार हैं (मुझे नहीं पता है कि क्या संभव है):

  • फ़ाइल अनुमतियां
  • PHP सत्र
  • अस्थायी फ़ाइल नाम या URL
  • HTTP रीडायरेक्शन?

शायद यह कई वेब साइटों पर अभ्यास नहीं है? उदाहरण के लिए मैंने लॉग इन में बीइंग के बिना फेसबुक पर एक निजी तस्वीर का उपयोग करने की कोशिश की, लेकिन मैं अभी भी फोटो देख सकता था

मंच संभवतः NginX और PHP के साथ एक उबंटू मशीन होगा।


आप कुछ तरह की छवियों को पुनः प्राप्त करने के लिए PHP स्क्रिप्ट का उपयोग कर सकते हैं:

<img src="mysite.com/getimage.php?id=001" />

और PHP स्क्रिप्ट छवि डेटा को केवल पुष्टि करने के बाद लौटाता है कि HTTP_REFERER का डोमेन आपकी है

यदि आपके पास अकाउंट-ओरिएंटेड साइट है, तो मैंने सुझाव दिया है कि PHP सत्रों का इस्तेमाल करते हुए आपको और PHP स्क्रिप्ट छवि डेटा वापस करने से पहले सत्र की पुष्टि करें।


यह करना मुश्किल होगा चित्रों को एक्सेस करने के लिए अपने क्लाइंट के वेब ब्राउज़र के क्रम में, उन्हें पढ़ने योग्य होने चाहिए। फ़ाइल अनुमतियां काम नहीं करेंगी क्योंकि आपको ब्राउज़र तक पहुंच प्रदान करने की आवश्यकता होगी। आप किसी को डाउनलोड करने और उनके साथ कुछ करने से रोक नहीं पाएंगे।

यदि आप सीधे लिंकिंग को रोकना चाहते हैं, यदि आप फ़ाइल नामों को नियमित आधार पर बदलते हैं और इसे प्रदर्शित करने के लिए अपने पृष्ठों को अपडेट करते हैं, तो अन्य पृष्ठों में उनके लिंक टूटे होंगे


Follwoing लाइनों के साथ अपनी साइट फ़ोल्डर में एक सरल .htacess फ़ाइल जोड़ें

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]

नोट मैंने js और css फाइल भी जोड़ दी है, भले ही मुझे लगता है कि यह उन लोगों को खोजना है जो उन्हें निंदा करने का प्रयास करता है।


मैं दोनों विधियों का उपयोग करता हूँ - उपयोगकर्ता के अभिभावक और रेफरर की जांच करना। उपयोगकर्ता एजेंट मैं .htaccess पर जांच। और PHP फ़ाइल पर रेफरर चेक। आप इसे http://coloring-4kids.com पर देख सकते हैं

यहां मेरा कोड है:

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?pinterest\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?pinterest\.com$ [NC]

RewriteCond %{HTTP_USER_AGENT} !(Googlebot|bingbot|msnbot|yahoo-mmcrawler|YandexImages) [NC]
RewriteCond %{HTTP_USER_AGENT} !googlebot-image [NC]
RewriteCond %{HTTP_USER_AGENT} !googlebot [NC]
RewriteCond %{HTTP_USER_AGENT} !googlebot-news [NC]
RewriteCond %{HTTP_USER_AGENT} !googlebot-video [NC]
RewriteCond %{HTTP_USER_AGENT} !googlebot-mobile [NC]
RewriteCond %{HTTP_USER_AGENT} !mediapartners-google [NC]
RewriteCond %{HTTP_USER_AGENT} !mediapartners [NC]
# RewriteCond %{HTTP_USER_AGENT} !adsbot-google [NC]
RewriteCond %{HTTP_USER_AGENT} !bingbot [NC]
RewriteCond %{HTTP_USER_AGENT} !facebookexternalhit [NC]
RewriteCond %{HTTP_USER_AGENT} !baiduspider [NC]
RewriteCond %{HTTP_USER_AGENT} !yandex [NC]
RewriteCond %{HTTP_USER_AGENT} !sogou [NC]
RewriteCond %{HTTP_USER_AGENT} !twitterbot [NC]
RewriteCond %{HTTP_USER_AGENT} !pinterest [NC]


RewriteRule (^.*\.(gif)$) /watermark.php?src=$1 [L]

watermark.php

<?php  

$test = getenv("HTTP_REFERER");
$proverka =  substr($test, 0, 25);

 header('content-type: image/jpeg');

 $image = imagecreatefromgif($_GET['src']);

 $watermark = imagecreatefromgif('watermark.gif');

 $watermark_width = imagesx($watermark);
 $watermark_height = imagesy($watermark);


 $dest_x = imagesx($image) - $watermark_width;
 $dest_y = imagesy($image) - $watermark_height;



if (strpos($proverka, 'media') !== false)
   { $pinproverka=true; }

 if (($proverka != 'http://coloring-4kids.com') && (imagesx($image) > 400) && ($pinproverka!=true) )  { imagecopymerge($image, $watermark, $dest_x - 5, 5, 0, 0, $watermark_width, $watermark_height, 100); }



 imagegif($image);

 imagedestroy($image);
 imagedestroy($watermark);

?>

अपने .htaccess में अस्वीकार नियम जोड़ें

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

यह उपयोगी हो सकता है: .htaccess के साथ छवि हॉटलिंकिंग की अनुमति दें / अस्वीकार करें

संपादित करें: इस पद्धति के बारे में ध्यान देने योग्य एक बात यह है कि जब आप ब्राउज़ करते हैं तो कुछ ब्राउज़र / एवि / फ़ायरवॉल सॉफ़्टवेयर रेफेरर डेटा को निकालता है, जो संभावित वैध उपयोगकर्ताओं को हॉटलिंक के रूप में माना जाएगा।

यदि आपकी साइट पहले से किसी प्रकार के प्रमाणीकरण या सत्र प्रणाली का उपयोग करती है, तो @ मार्क बेजेंस के जवाब में दी गई विधि का उपयोग करना बेहतर होगा।

अद्यतन: हॉटलाइनिंग रोकने के लिए एनजीआईएनएक्स पुनर्लेखन नियम:

location ~* (\.jpg|\.png|\.css)$ {
    valid_referers blocked mydomain.com www.mydomain.com;
    if ($invalid_referer) {
        return 444;
    }
}




access-protection