Nenapadá vás, ako zabezpečiť obrázky generované php tak, že keď sa čítajú priamo z iného ako môjho serveru (cez <img src=""...), aby sa zobrazila nejaká varovná hláška (napr. nelegálna kópia a pod.) diky
.htaccess:
Order Deny,Allow
Deny from all
Allow from tva_ip
ja chcem aby sa na mojom webe vsetkym ukazali obrazky
ale na inych weboch kde priamo cez img src odkazuju na moje obrazky nech sa zobrazi varovna hlaska o nelegalnej kopii
misho: To prakticky nejde. Leda overenim http_refereru (obrazky bys musel vkladat jako <img src="obrazek.php?src=xxx.jpg" />, atp.), ale to neni spolehlive.
Jednou jsem to někde vygooglil, ale nemůžu to najít. Šlo o to, že když někdo tahal obrázek z webu na svou stránku, tak se mu tam zobrazil jiný s textem (např: kradu obrázky).
Havel-st: To je nejspis prave podle refereru. Nenapada me jinej zpusob, jak to zaridit.
> obrazky bys musel vkladat jako <img src="obrazek.php?src=xxx.jpg" />, atp.
ja tak vlastne vkladam obrazky, tam by problem nebol...
ako to teda spravit cez ten http_referer ? diky
Použij mod rewrite. Najdi si to na googlu ted specham ale jeste se tu ukazu a kdyztak vysvetlim
napadá mě:
v tom obrazek.php?... se zeptáš kdo ho stahuje, když to stahuje tvůj web, tak nedělej nic, když cizí, tak tam přidej text (fce imagecosi).
Zjištění, kdo to stahuje je, jak tu bylo napsané, přes referer.
Celé by to mohlo vypadat takto:
<?php
header('Content-type: image/jpg');
$r = basename($_SERVER['HTTP_REFERER']);
if ( $r == 'obrazek.html' ) { // tady pripadne jine coromoro s refererem
file($_REQUEST['obr']);
} else {
$im = imagecreatefromjpeg($_REQUEST['obr']);
$textcolor = imagecolorallocate($im, 0, 0, 255);
// write the string at the top left
imagestring($im, 5, 0, 0, "Kradu obrazky!", $textcolor);
imagejpeg($im);
}
?>
Není to odzkoušené, bo na win mi nejede gd2...
.. otestovane:
<?php
header('Content-type: image/jpg');
$r = @basename($_SERVER['HTTP_REFERER']);
if ( !isset($_REQUEST['obr']) ) { $_REQUEST['obr'] = 'img/logo.jpg'; }
if ( $r == 'obrazek.html' ) { // tady pripadne jine coromoro s refererem
readfile('./'.$_REQUEST['obr']);
} else {
$im = imagecreatefromjpeg($_REQUEST['obr']);
$textcolor = imagecolorallocate($im, 0, 0, 0);
$t2 = imagecolorallocate($im, 255, 255, 255);
// write the string at the top left
imagestring($im, 8, 30, 30, "Kradu obrazky!", $textcolor);
imagestring($im, 8, 29, 29, "Kradu obrazky!", $t2);
imagejpeg($im);
}
?>
pokud je to volané jako
<img src="obr.php?obr=img/logo.php"> z obrazky.html, tak je to puvodni obrazek.
Pokud je to odjinud,tak prida text.
samozrejme se podminka da postavit jinak, treba na nazev serveru....
adresare s obrazky se musi zakazat pristup z webu, ale jak to uz musi poradit jini. Nejspis pres .htaccess.
On je problem v fom, že některé firewally (a někteří uživatelé) mají nastaveno blokováni HTTP_REFERER. To bych radši aby je někdo kradl, než aby se někomu nezobrazily. Nakonec stejně vždycky pude je zkopírovat a použít. Možná by to šlo řešit přez SESSIONS: na stránce by se uložila proměná
$_SESSION['nekradu_oprasky'] = time();
a ten script na načítání obrázku by měl podmínku:
---
if(isset($_SESSION['nakradu_oprasky']) && time()-60<$_SESSION['nakradu_oprasky']){
načís obrázek
}else{
obrázky se kradou
}
--- počítá s maximálním časem od načtení stránky a načtení obrázku 1 minutu
samozřejmě by se muselo do adres
obrázků (i stránek) přenášet SESSID (SID, nebo PHPSESSID), aby to fungovalo i vyhledávačům a liden se zakázanými cookies.
este doplnok k navodu MzM:
daj vsetky obr. do adresara img a donho daj .htaccess
order allow,deny
deny from all
http://faq.webzdarma.cz/otazka.php?42
Nicmene nutno podoktnout, ze http_referer se da snadno vypnout nebo zfalsovat.
to je fakt ... popripade si obrazok ulozi a nahra na net ... ale je to asi druhe najlepsie riesenie (najlepsie je vobec to nedat na net :))