[PHP/Flash] Hoe zie ik wie mijn flash embedded heeft?

Pagina: 1
Acties:
  • 141 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Hoi,

Ik ben een website aan het maken waar video's opstaan geplaatst waar mensen naar toe mogen linken via een embeded object en zo deze videos mogen toevoegen aan hun website. Het probleem is echter dat mensen dit alleen mogen doen als ze zichzelf eerst hebben geregistreerd. Ik wil namelijk per website statistieken bijhouden hoevaak ze het filmpje afspelen. Ik gebruik de flash mediaplayer van jeroen wijering . Het embeded object ziet er nu alsvolgt uit:

code:
1
<embed src="http://localhost/mmcnl/flash/mediaplayer.swf" width="320" height="340" allowfullscreen="true" allowscriptaccess="always" flashvars="&displayheight=240&file=http://localhost/mmcnl/php/external_feed.php&height=340&width=320" />


Ik weet dat er nog localhost instaat maar dit is alleen voor het testen. De XML playlist wordt nu opgehaald via een php script. In dit php script external_feed.php wil ik nu ook controleren of je wel gerechtigd bent om dit filmpje te laten zien op je website. Ik wil dus weten welke website hierom vraagt. Nu heb ik dit geprobeerd via $_SERVER['HTTP_REFERER'] en via $_SERVER['REMOTE_ADDR'] maar dan krijg ik natuurlijk alleen het IP van de localhost te zien en referer wijst naar de mediaplayer.swf op mijn localhost. Wat ik moet weten is echter de website waar de embeded code opstaat.

Het is geen oplossing om ID's mee te geven want een kwaadwillende persoon kan dan de embed code gewoon kopieren uit een site van een geregistreerde gebruiker en dan op zijn ID gaan werken. Ik moet dus zelf op een of andere manier detecteren welke site het is.

Iets anders waar ik aan dacht was een .htaccess te gebruiken op de plaats waar de xml playlist staat en daarin alleen de IP adressen op te nemen van de regegistreerde websites. Echter dat is ook geen oplossing omdat ik alleen de IP's van de clients (bezoekers van website) zie.

Heeft iemand een idee hoe ik toch erachter kan komen wie de video embeded heeft?

Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 05:27
De referer is te faken en wordt ook niet altijd meegegeven door de browser dus dat is sowieso geen fijne oplossing.

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Wat je kunt doen is swf afvangen met php, de referer (welke de url bevat waarvan deze wordt aangeroepen) controleren, en als deze correct is, de flash alsnog wegschrijven naar de output stream - echo(file_get_contents($original_flash_location)).

Als je bij de broncode van de flash kan, kun je eventueel ook daar de referer opvragen en vanuit de flash via bijvoorbeeld een xml call een url van jouw php website opvragen (validate.php?ref=...).

Maar welke methode je ook gebruikt, in elk geval zul je de referer moeten verwerken.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Niemand_Anders schreef op dinsdag 20 november 2007 @ 09:22:
Wat je kunt doen is swf afvangen met php, de referer (welke de url bevat waarvan deze wordt aangeroepen) controleren, en als deze correct is, de flash alsnog wegschrijven naar de output stream - echo(file_get_contents($original_flash_location)).

Als je bij de broncode van de flash kan, kun je eventueel ook daar de referer opvragen en vanuit de flash via bijvoorbeeld een xml call een url van jouw php website opvragen (validate.php?ref=...).

Maar welke methode je ook gebruikt, in elk geval zul je de referer moeten verwerken.
Dit heb ik nu net geprobeerd:

code:
1
<embed src="http://localhost/mmcnl/php/external_player.php" width="320" height="340" allowfullscreen="true" allowscriptaccess="always" flashvars="&displayheight=240&file=http://localhost/mmcnl/php/external_feed.php&height=340&width=320" />


De external_player.php laadt nu mediaplayer.swf en schrijf deze naar de output. Echter als ik hier referer opvraag dan is die leeg :|

Acties:
  • 0 Henk 'm!

  • TimDJ
  • Registratie: Februari 2002
  • Laatst online: 22-09 16:02
als je wil weten wie het opvraagt kun je dan niet beter elke gebruiker een unieke hash in de url meegeven en het daaruit afleiden?

code:
1
<embed src="http://localhost/mmcnl/php/external_player.php?userhash=blablabla" width="320" height="340" allowfullscreen="true" allowscriptaccess="always" flashvars="&displayheight=240&file=http://localhost/mmcnl/php/external_feed.php&height=340&width=320" />

Freelance Drupal Developer


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
FAD schreef op dinsdag 20 november 2007 @ 09:35:
als je wil weten wie het opvraagt kun je dan niet beter elke gebruiker een unieke hash in de url meegeven en het daaruit afleiden?

code:
1
<embed src="http://localhost/mmcnl/php/external_player.php?userhash=blablabla" width="320" height="340" allowfullscreen="true" allowscriptaccess="always" flashvars="&displayheight=240&file=http://localhost/mmcnl/php/external_feed.php&height=340&width=320" />
Dat kan maar dat is niet echt veilig. Een kwaadwillende zou gewoon de code kunnen kopieren uit de website van een geregistreerde gebruiker en dan zijn hash gebruiken. Ik kan namelijk de hash niet controleren of hij ook op de juiste website staat. :|

Een ander idee waar ik net aan zat te denken is om het embeded object te laten wijzen naar een php file welke een javascript (.js) bestand leest en teruggeeft. In dit .js bestand vraag ik de URL op van de website en schrijf ik een embeded object via document.write waarin ik de URL meegeef.

[ Voor 16% gewijzigd door R0K13 op 20-11-2007 09:49 ]


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Volgens mij is het gelukt.. :)

Ik gebruik geen embeded object maar een javascript. Gebruikers die mijn filmpje willen gebruiken plakken het volgende in hun website:

code:
1
<script type="text/javascript" src="http://localhost/mmcnl/php/external_player.php"></script>


De external_player.php opent een javascript file met daarin:

code:
1
2
3
4
5
var URLwebsite = document.location;

var embeded_object = '<embed src="http://localhost/mmcnl/flash/mediaplayer.swf" width="320" height="340" allowfullscreen="true" allowscriptaccess="always" flashvars="&displayheight=240&file=http://localhost/mmcnl/php/external_feed.php?url='+URLwebsite+'&height=340&width=320" />';

document.write(embeded_object);


Nu mijn external_feed.php wordt geladen weet ik de echte url zonder referers :)

Ik moet er nog ff over nadenken maar dit lijkt me de enige goede oplossing.

Het woordje url wordt straks natuurlijk wat moeilijker te raden en je kunt de broncode van mijn JS bestand niet lezen. Dus faken is een stuk lastiger.

[ Voor 7% gewijzigd door R0K13 op 20-11-2007 10:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Broncode onleesbaar? Dat is helaas niet mogelijk bij javascript, als de client het kan uitvoeren kan de client het ook lezen.

Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Verwijderd schreef op dinsdag 20 november 2007 @ 10:11:
Broncode onleesbaar? Dat is helaas niet mogelijk bij javascript, als de client het kan uitvoeren kan de client het ook lezen.
Ja ok maar dan zou je al je eigen webbrowser moeten bouwen en dan moeten kijken wat die binnenkrijgt voor code. Neem niet aan de IE gewoon codes prijs geeft die je via php include. Lijkt me erg omslachtig als je je ook gratis kunt registreren :|

Acties:
  • 0 Henk 'm!

Verwijderd

Nee hoor, je kunt heel eenvoudig alle javascript bekijken via een plugin bijvoorbeeld.

Maar even gluren in de bron en je hebt jouw JS file te pakken, die kun je gewoon direct opslaan op je schijf en uitlezen daar heb je niets bijzonders voor nodig.

Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Als je die URL opent zie je toch gewoon de inhoud van je .js :S?

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Je moet mensen gewoon een blok HTML aanbieden en er van uitgaan dat ze het op exact die manier in hun site opnemen. De meesten zullen allang blij zijn dat jij de bandbreedte voor je rekening neemt. Waarom maakt het je uit als de video nog verder verspreid raakt? Hoe meer mensen er naar linken, hoe beter toch? Geef iedereen in de HTML gewoon een uniek ID en registreer die (en de referrer) bij iedere view. Dan heb je in ieder geval alle data die je wilt.

Als mensen de embed tag van een site plukken en verder gebruiken... sjah. Dat kan je het niet voorkomen: als iemand een video kan zien, dan kan iemand de video rippen. Er bestaat geen foolproof methode om dat te voorkomen.

[ Voor 7% gewijzigd door Confusion op 20-11-2007 10:48 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Ik vind het verspreiden ook geen probleem maar ik wil wel de statistieken kunnen bijhouden.
Het openen van de URL van de js is natuurlijk niet mogelijk omdat ik een PHP include waarvan je de broncode niet ziet en je weet dus ook niet welke JS ik include. Even gluren in de bron naar mijn JS file kan dus helemaal niet. Die staat genoemd in mijn PHP code.

Wat hoogstens kan is dat je via je browser kunt zien welke javascript code ik naar hem toestuur. Dan zie je welke variabele ik gebruik voor het doorgeven van de URL en dan kun je die vervangen door je eigen. Echter deze variabele verander ik telkens weer dus je zult vaker dan een keer moeten kijken wat de variabele nu weer is. Kortom een geript filmpje doet het misschien maar 1 dag.

[ Voor 35% gewijzigd door R0K13 op 20-11-2007 12:33 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 00:32

TeeDee

CQB 241

R0K13 schreef op dinsdag 20 november 2007 @ 12:31:
Ik vind het verspreiden ook geen probleem maar ik wil wel de statistieken kunnen bijhouden.
Het openen van de URL van de js is natuurlijk niet mogelijk omdat ik een PHP include waarvan je de broncode niet ziet en je weet dus ook niet welke JS ik include. Even gluren in de bron naar mijn JS file kan dus helemaal niet. Die staat genoemd in mijn PHP code.
Ik denk dat je nu Serverside en Clientside door elkaar gaat halen.

In de clientside zal altijd de JS te vinden zijn, ongeacht of het door PHP geinclude, gelezen of wat dan ook wordt.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Die php code zal uiteindelijk toch zijn html naar de client sturen en daarbij stuurt hij ook keurig de JS mee. Dat is dus gewoon perfect leesbaar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
TeeDee schreef op dinsdag 20 november 2007 @ 12:32:
[...]

Ik denk dat je nu Serverside en Clientside door elkaar gaat halen.

In de clientside zal altijd de JS te vinden zijn, ongeacht of het door PHP geinclude, gelezen of wat dan ook wordt.
Ok. Maar ik include de JS file niet echt. Ik include een PHP bestand die leest de javascript uit een bestand en past deze aan en output hem dan naar de browser. Deze code kun je stelen maar die veranderd met de dag dus je zult elke dag opnieuw de code moeten stelen anders doet het filmpje het maar hoogstens 1 dag.

Het hoeft niet waterdicht te zijn maar het mogen ook niet gewoon kopieren en plakken zijn. Ik wil dat mensen zich registreren. Dat kan gratis en zolang dat dit makkelijker is dan het stelen van de code denk ik dat de mensen hiervoor kiezen.

[ Voor 16% gewijzigd door R0K13 op 20-11-2007 12:37 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 00:32

TeeDee

CQB 241

Mjah, dan 'jat' ik het elke dag. Maakt niks uit. Anders toon je eens wat code hoe je het denkt opgelost te hebben.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
code:
1
2
3
4
5
var URLwebsite = document.location;

var embeded_object = '<embed src="http://localhost/mmcnl/flash/mediaplayer.swf" width="320" height="340" allowfullscreen="true" allowscriptaccess="always" flashvars="&displayheight=240&file=http://localhost/mmcnl/php/external_feed.php?url='+URLwebsite+'&height=340&width=320" />';

document.write(embeded_object);


Hierboven staat de javascript code. Deze bevindt zich in een JS bestand welke wordt geopend door de php file external_player.php die je alsvolgt include:

code:
1
<script type="text/javascript" src="http://localhost/mmcnl/php/external_player.php"></script>


De GET variabele url= wordt iedere dag anders, bijvoorbeeld de ene keer url123= daarna url567= etc. Ik weet natuurlijk wat de url moet zijn omdat hij volgens een vast algoritme wordt gemaakt. Dit algoritme bevindt zich dus in een PHP file en is niet leesbaar. Je kunt nu de bovenstaande javascript code stelen maar dan doet hij het een keer en daarna klopt url= niet meer. Dan laat ik je een of ander vies filmje zien i.p.v dat gene wat je wilt. Dan kun jij het wel opnieuw gaan jatten maar is gewoon ff registreren niet veel eenvoudiger dan??

Ik wil niet zeggen dat dit een perfecte oplossing is maar ik weet op dit moment niks beters. En wil jij wel het risico lopen dat de ene dag je bezoekers een mooie instructie video zien en de dag erna hardcore porno bijvoorbeeld :).. want je moest de code nog opnieuw jatten :|

[ Voor 10% gewijzigd door R0K13 op 20-11-2007 12:45 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 00:32

TeeDee

CQB 241

uhm, volgens mij (als ik je zo begrijp) is het voldoende om direct naar "http://localhost/mmcnl/php/external_player.php" te linken.

Jouw PHP 'poept' tenslotte een stukje JS uit. Of die nu obfuscated is of niet, de url kan ik prima automagisch achterhalen.

Eensch, het is een hoop moeite voor een gratis iets, maar misschien ga jij mij wel lastig vallen met spam na mijn registratie en heb ik daar geen zin in, dus doe ik het op die manier.

Ik wil je systeem niet onderuithalen, maar aantonen dat als je PHP Javascript laat maken, dat dat te achterhalen is.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
TeeDee schreef op dinsdag 20 november 2007 @ 12:50:
uhm, volgens mij (als ik je zo begrijp) is het voldoende om direct naar "http://localhost/mmcnl/php/external_player.php" te linken.

Jouw PHP 'poept' tenslotte een stukje JS uit. Of die nu obfuscated is of niet, de url kan ik prima automagisch achterhalen.

Eensch, het is een hoop moeite voor een gratis iets, maar misschien ga jij mij wel lastig vallen met spam na mijn registratie en heb ik daar geen zin in, dus doe ik het op die manier.

Ik wil je systeem niet onderuithalen, maar aantonen dat als je PHP Javascript laat maken, dat dat te achterhalen is.
Gewoon naar http://localhost/mmcnl/php/external_player.php linken is niet voldoende. Ik zie dan wat jouw URL is en ik link je door naar een ander filmpje dan je eigenlijk wilde zien.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

R0K13 schreef op dinsdag 20 november 2007 @ 12:36:
Ik wil dat mensen zich registreren.
Waarom? Zullen de meeste mensen dan niet denken 'dikke vinger, ik zoek ergens anders wel een leuk filmpje, waar ik wel heen mag linken zonder registratie-geneuzel'? Ik in ieder geval wel. Ik vind dat iemand blij mag zijn als ik van mijn site naar de zijne link.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Confusion schreef op dinsdag 20 november 2007 @ 13:00:
[...]

Waarom? Zullen de meeste mensen dan niet denken 'dikke vinger, ik zoek ergens anders wel een leuk filmpje, waar ik wel heen mag linken zonder registratie-geneuzel'? Ik in ieder geval wel. Ik vind dat iemand blij mag zijn als ik van mijn site naar de zijne link.
Ja daar heb je gelijk in alleen is dit geen youtube-actige website die ik maak. De filmpjes zijn copyright beschermt en de makers willen precies weten waar ze te zien zijn. Daar heb ik niks over te zeggen, zo willen mijn opdrachtgevers het :|

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Dan zal je je opdrachtgevers er van moeten overtuigen dat dat niet technisch haalbaar is. (En bovendien niet eens verstandig is IMHO).

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Het enige dat ik kan verzinnen is zorgen dat je controle hebt aan de kant van de hosting van de pagina's die linken naar je filmpjes. Als je kan eisen dat daar bijvoorbeeld PHP draait, dan kan je server-to-server communiceren, en dat is wel behoorlijk veilig:

1) Iemand vraagt filmpje op van site
2) hoster legt contact met jouw server om een eenmalige URL op te vragen met behulp van een eigen registratie ID en IP adres van de aanvragende host
3) hoster redirect request voor filmpje naar de zojuist verkregen URL
4) client vraag URL van filmpje op
5) film server controleert key in de URL met het IP adres van de aanvrager (eenmalig geldig) en streamt filmpje als hij klopt

Het stukje code voor 2) en 3) is helemaal niet zo complex en kan je als kant en klare PHP code aanbieden. Andere server-side talen kan net zo goed natuurlijk. De truc is dus dat je 1) de code waarmee je een geldige URL kan opvragen niet te zien is voor iemand die de site alleen maar bekijkt en dat de URL die vervolgens terug komt maar één keer (of voor beperkte tijd ofzo) bruikbaar is, zodat hij zelf niet in een site te embedden is.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • R0K13
  • Registratie: Januari 2003
  • Laatst online: 12-08 19:36
Bedankt voor jullie hulp!
Ik hou het toch eenvoudig zoals ik hierboven heb uitgelegd. Het is niet helemaal waterdicht maar dat is niet echt een probleem. Helaas heb ik niks te zeggen over de websites waar de videos opkomen. Jouw idee ATS is een goed idee alleen helaas niet toepasbaar in mijn situatie.
Bedankt voor het meedenken :)
Pagina: 1