Ik ben voor dit een oplossing aan het maken, en die heb ik grotendeels al wel...
Maar met mijn oplossing kan je nog wel achter de url komen die ge-echoed word ALS je dmv een form met als actie "mijn" php gebruikt en de juiste var post.
Ik wil dus voorkomen dat er via een andere locatie een form gepost kan worden.
Een check via $_SERVER['HTTP_REFERER'] gaat me niet lukken omdat ik wel wil dat er ge-echoed word, ook al is er geen refer.(en bovendien wil ik geen onnodige redirect oid maken om de refer juist te krijgen)
Nu heb ik mn "veilige" flash zo gemaakt dat die een var output naar die php, als die var goed is dan echoed die php de link naar het te laden bestandje. (so far so goed en alles werkt perfect)....
Maar je kan dus die var ook via een extern form laten verschijnen (als je de swf openbreekt en de var uit de flash neemt)....
Iemand een idee hoe ik dit kan voorkomen ?
Ik hoop dat jullie mijn verhaal snappen, ikzelf heb het er wel moeilijk mee in ieder geval
Het nadeel van flash en php is dat de php de waardes echt moet echoen om ze te passen naar de swf toe, maw, als je een extern form gebruikt en die flash variabel post dan zie je de "belangrijke" var gewoon in beeld.
Dat van die gecodeerde url moet ik even heel hard over nadenken.
Ikzelf heb het anders opgelost, het is geen super oplossing maar het is wel effectief.
Wat je doet:
Je zet een sessie tegelijk met het weergeven van een formulier.
Bij het versturen controleer je of de sessie geset is.
Zo niet, geef je een error dat het formulier van de verkeerde pagina is verstuurd.
Zo wel, dan ga je de formulierafhandeling doen, en je unset de sessie zodat je hem ook tegelijk maar 1 keer kan versturen.
Dus als je daarna op F5 drukt, bestaat de sessie niet meer (die heb je al ge-unset) dus krijgt de bezoeker een error dat de sessie niet meer bestaat.
Na het unsetten van de sessie ga je je gegevens controleren en afhandelen.
Ah, oke, ja. Wat je ook kunt doen, is met IP's werken.
Simpel voorbeeld:
Je maakt een sessie aan in de pagina met het formulier. Wordt het formulier verzonden, naar vergelijk je het IP uit de sessie met $_SERVER['REMOTE_ADDR']. Is deze gelijk, dan komt hij van jouw formulier, anders niet.
Maar als de "hacker" dan al eens op je site is geweest (en zn browser niet heeft afgezet) dan bestaat die sessie toch nog steeds (in een tabblad ofzo).
Maar ik ben niet bekend met dat unset gedoe, dus ik ga me daar eens in verdiepen
Mischien bied dat een oplossing.
edit: @henri ah dat is idd een goed idee, alleen zou ik eigenlijk geen db willen gebruiken, maar als het zo wel werkt dan moet de hacker al veeeeel doen (swf openbreken/form maken/ip spoofen) maw...redelijk safe
woei, de flash communitie gaat blij zijn als dit allemaal gaat lukken, dan kunnen ze gewoon swfjes (includen (loadmovie)) zonder dat de "rippers" ze dan kunnen tracen !
<?PHP
if($_SERVER['REQUEST_METHOD'] == "POST")
{
if( (!IsSet($_SESSION['sessieNaamVoorCheck'])) || ($_SESSION['sessieNaamVoorCheck'] !== true) )
{
echo "Het formulier is niet vanaf de juiste pagina verzonden.";
} else
{
unset($_SESSION['sessieNaamVoorCheck']);
// vanaf nu bestaat de sessie niet meer
echo "Het formulier is vanaf de juiste pagina verzonden.";
}
} else
{
$_SESSION['sessieNaamVoorCheck'] = true;
?>
formulier
<?PHP
}
?>
Zouden de lezers willen checken of ze erachter kunnen komen wat de naam is (niet het orgineel, want ik heb het een andere naam gegeven) kunnen achterhalen ?
dus probeer wat te pielen en leg me uit hoe je het voor elkaar kreeg om de naam van de door mij gebruikte mp3 te vinden.
Als volgt :
- Zorg dat je een flash swf-decoder op je pc hebt staan
- Zorg dat je een packet sniffer op je pc hebt staan (ik raad Ethereal aan)
Met deze 2 tools is het gesneden koek.
Open de pagina, sla de swf op. Decode hem met de flash decoder zoek naar de variable die hij gaat laden in dit geval was het :
geluid.loadsound(url, true);
Deze heeft hij eerder verkregen van url.php via n post.
Als je dat weet kan je gaan zoeken in je packets. Open Ethereal Zorg dat je geen open verkeer hebt, dus geen downloads websites die streamen of wat dan ook.
Start met capturen en refresh de pagina. Als je n packet of 20 hebt heb je n goede kwantiteit om het post forum te achterhalen.
(Kijk in de packets die verstuurd/ontvangen zijn Via het HTTP protocol)
Net dat program gedownload en getest, en inderdaad het is redelijk te doen zo, maar dan moet je al wel heel ver gaan wil je zoiets doen.
Ik ben nog wat aan het googlen geweest om dit tegen te gaan, maar verder dan het checken op mac adressen kwam ik niet, er zijn al verschillende topics geweest over het detecteren daarvan, maar dat is dus onmogelijk (werkt alleen op locale netwerken).
Mocht je hiervoor toch een werkende php oplossing hebben (of iets wat gewoon iedereen kan gbruiken op zn host), dan hoor ik die uiteraard graag.
Ik heb de url weer veranderd voor degene die het toch op een andere manier willen proberen !
Dus het mp3 heet niet meer muhaha.mp3
bijna dezelfde manier... ipv een header te sturen lees je het bestand op de server in, echo't het en geeft de juiste content type mee!
het mooiste zou zijn als je je flashbestandje kon compilen op je server.
dan kon je iedere keer de "geheime string" mee kunnen geven in het flashbestandje zelf.
Nu is het ook zo dat iemand gewoon 2 requests doet naar je server en hij heeft zn liedje alsnog..?
Dat online "compilen" gaat niet lukken, maar er plopt me inneens iets te binnen wat mischien ook wel werkt.
Wat je precies bedoeld met headers begrijp ik niet echt omdat ik nog steeds een dikke naab in php ben, maar ik zal dat (na uitwerking van mn net binnengeplopte idee uitgewerkt te hebben) eens uitzoeken.
edit 2 requests ?....wat is het liedje dan ? (/me hoopt dat je het mis hebt)
edit: hmm mijn idee is ook niet goed, dan kan je die packets nog steeds gewoon zien, dus ik begin er niet eens aan
met javascript laat je de eerste keer de flash ophalen, sessie wordt geset. je submit je formulier en niemand zal ooit iets merken!
je moet iets aan dat form vanaf de client meegeven waardoor die weet dat de flash echt is gebruikt..
<?
if(isset($_POST['stuurmijmijnmp3']))
{
if($_POST['valideercode']==$_SESSION['valideercode'])// code waardoor je weet dat de post echt van het flashbestandje komt.
{
header('Content-type: audio/mpeg');
readfile('mp3tje.mp3');
exit;
}
else
{
//illegale hit
}
}
else
{
//flashbestand echoën, dit bedoelde ik met het op de server compilen, dan zou je de valideercode mee kunnen geven.
}
?>
//flashbestand echoën, dit bedoelde ik met het op de server compilen, dan zou je de valideercode mee kunnen geven.
}
?>
dit geheel noem je flash.php
Edit over een andere boeg:
Je zou iets in java kunnen schrijven die de veiligheidscode maakt
[URL=http://img480.imageshack.us/my.php?image=naamloos0ev.jpg]http://img480.image.../naamloos0ev.th.jpg[/url]
maar het bestand die ik heb IS toch al safe ?..zoniet zeg dan "waar" het in gebreke blijft, het enige wat er nu nog is, is dat een sniffer alles ziet wat er verzonden word, dus ook "readfile('mp3tje.mp3');"
Waar het me nu om gaat (als mn file echt safe is op Xside scripting), is dat een sniffer er geen zak van snapt (of toch iig de gebruiker van die sniffer niet)
ik neem aan dat je neit wil dat mensen hotlinken naar je mp3tje?
wat je nu doet is de toegang tot dat mp3tje versleutelen. niemand zal zien dat dat bestand mp3tje heet..
ik wil alleen zeggen dat zomaar een sessie neerzetten geen enkel nut heeft, iemand moet nu gewoon 2 hits doen ipv 1 om het mp3tje te krijgen.
en verder als je het onleesbaar wil maken moet je het encrypten, zo dat het geen vermogen aan cpukracht kost om het weer om te zetten naar iets bruikbaars.
wat doet die naam er toe als je op een andere manier precies hetzelfde mp3tje krijgt?
het enige wat je nu gedaan hebt is het onder een andere naam beschikbaar maken en een verplichting gesteld van 2 hits ipv 1..