[PHP/PERL] Externe pagina's helemaal controleren/ontleden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Ik heb in de loop der tijd veel verwijzingen in mijn database opgenomen naar andere websites voor meer informatie over bepaalde onderwerpen, en krijg dagelijks nog verzoekjes om linkjes op te nemen naar andere websites. Nu is het probleem dat mensen nadat ze een link bij mij hebben aangemeld dat ze deze vaak veranderen of verwijderen naar een sponcor om bepaalde dingen te kunnen verkopen. Ik wil hiervoor een script hebben die controleerd of de pagina nog wel aan de eisen die ik stel voldoe: geen redirect, geen plaatjes die niet werken, geen mouseovers, popups, etc. Met welke taal kan ik dit het beste doen en hoe (welke functies) moet ik dan gebruiken, ik ben zelf erg vaardig met PHP, maar heb geen idee waar te moeten beginnen of te moeten zoeken en waarop te moeten zoeken. Het is dus de bedoeling dat het script via een cron alle linkjes in de database controleerd en op de pagina's alles plaatjes controleert of ze werken en op verboden code. Kan iemand me een zetje in de goede richting geven?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Ik zou gewoon voor PHP gaan en ook kennis van regexpen ontwikkelen. Dat is erg handig hiervoor. Keuze voor PHP: omdat je daar de meeste ervaring mee hebt en de efficiëntie van het ontwikkelen daardoor beter wordt. Zeker omdat PHP voor dit soort zaken imo niet veel voordelen heert t.o.v. Perl.

Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Ik heb de turotial op http://gerard.yoursite.nl/got/regex-tut/ doorgelezen. Maar ik die niet echt hoe ik dat nu werkelijk kan gebruiken bij het te maken script. Het script moet alle tekst op de pagina controleren nadat hij gecontroleerd heeft of de server geen HTTP errors geeft. Op de pagina mogen vervolgens geen tekens voorkomen die opgegeven worden op een zogenaamde "blacklist". Vervolgens moet het script alle plaatjes controleren op de website of deze werken en of de url's op die pagina ook werken. Het zou leuk zijn of hij ook nog controleerde de grootte van de plaatjes en de aanliggende websites, maar dat is even van latere zorg. Waar ik meer meezit is het probleem dat ik niet weet hoe of met welke functie ik een externe pagina kan oproepen en die vervolgens kan controleren op verboden code combinaties. Hoe vervolgens alle linkjes en plaatjes op die website te controleren of ze werken is het volgende waar ik op het moment nog niet precies weet welke functie's van php daarvoor dan het beste kunnen worden gebruikt. Wat zijn de voordelen van PHP t.o.v. een Perl script in jou ogen djluc?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je hebt meer ervaring met PHP dus dat is imo een groot pluspunt aangezien je sneller en foutlozer kunt werken. Tenminste bij mij is dat het geval.

Met fopen kun je verder een externe pagina laden. Meer info: http://www.php.net/file

Acties:
  • 0 Henk 'm!

Verwijderd

Je zou ook eens kunnen kijken voor een PHP HTML parser. Hiermee kun je makkelijk (eventueel aangevuld met regexp's) SRC attributen van plaatjes checken of ze een script aanroepen of kijken of er iets met de document.location binnen script tags, of in onClick, onMouseOver of andere script attributen van HTML elementen.

Volgens mij kun je zo wel een heel eind komen. Om HTTP redirect headers te herkenn zul je denk ik wel nog wat meer trucs uit de kast moeten halen, want ik dacht dat fopen gewoon vrolijk redirects volgt, hoewel ik dat niet zeker weet.

Ik denk dat als je bovenstaande trucjes eruit kunt filteren dat je dan wel een heel eind komt, maar er zal altijd wel iemand zijn die er langs weet te komen en misschien sluit je op deze manier ook legitieme sites uit (die bijvoorbeeld een simpel counter script als image src op hun pagina hebben). Het lijkt me erg moeilijk om goede criteria op te stellen hiervoor, maar in ieder geval veel succes ermee.

Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Of je haalt http://validator.w3.org/checklink er ff overheen... maar ja. Maar dat helpt je alleen met redirects ...

seweso's blog


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Die validator daar heb ik niet veel aan, dat is mijn bedoeling ook niet, ik wil controleren of de pagina die ik gelinkt heb geen redirect op zijn pagina heeft staan. Ik heb een stuk over regexp's gelezen, deze hebben het over veelvoorkomende combinatie's zoals postcodes, maar ik zie niet echt hoe die veelcoorkomende combinaties me kan helpen om een pagina te ontleden. Op de één of andere manier moet ik de hele html bron ontleden en alle images controleren op grootte en alle links nalopen, daarnaast moet ik controleren op verboden code zoals mouseovers en hover events. Iemand enig idee hoe ik dit makkelijk kan doen? Welke functie's. Ik heb de indruk dat explode iets is, maar word dat niet erg ingewikkeld?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Gerwin schreef op 13 juni 2004 @ 01:15:
Die validator daar heb ik niet veel aan, dat is mijn bedoeling ook niet, ik wil controleren of de pagina die ik gelinkt heb geen redirect op zijn pagina heeft staan. Ik heb een stuk over regexp's gelezen, deze hebben het over veelvoorkomende combinatie's zoals postcodes, maar ik zie niet echt hoe die veelcoorkomende combinaties me kan helpen om een pagina te ontleden. Op de één of andere manier moet ik de hele html bron ontleden en alle images controleren op grootte en alle links nalopen, daarnaast moet ik controleren op verboden code zoals mouseovers en hover events. Iemand enig idee hoe ik dit makkelijk kan doen? Welke functie's. Ik heb de indruk dat explode iets is, maar word dat niet erg ingewikkeld?
Dit is onmogelijk, als iemand het echt wil zal hij echt wel een redirect kunnen opnemen. Een http-header, een meta-refresh, een javascript, javascript in een .js bestand, javascript gekoppeld via css (behaviour; .htc), een encoded javascript, etc.

Je kunt met een stukje zoals dit bijvoorbeeld kijken of er onmousovers voorkomen op een pagina.
PHP:
1
2
3
4
5
$file = file_get_contents('http://www.tweakers.net');
if (preg_match("!<\w+ [onmouseover|onmouseon|onmouseout]=.*?>!i",$file))
{
  echo 'Er komt een mouse-event in deze pagina voor!';
}


Uitleg regexp:
code:
1
2
3
4
5
6
7
8
9
!<\w+ [onmouseover|onmouseon|onmouseout]=.*?>!i
|| || |    |      |  + dit woord        | | |||
|| || |    |      + óf                  | | ||+ ignore case
|| || |    + vind dit woord             | | |+ einde regexp
|| || + een keuzelijstje                | | + einde tag
|| |+ een of meer keer                  | + .*? de rest v/d tag
|| + een letter                         + een = voor het attrib.
|+ begin van een html-tag
+ begin van de regexp


Plaatjes die niet werken vind ik ook een mooie. Je zult dan alle <img> tags moeten aflopen, alle background-attributen, alle background-image css properties. Om nog maar niet te spreken van dynamisch veranderende plaatjes zoals in menu's (oh nee, dat mocht niet, deze menu's werken meestal met onmouseover en onmouseout of el:hover).

Dan moet je al deze images openen en controleren of ze niet een 404 opleveren.

Zo'n script als je wilt is heel eenvoudig te blokkeren:
PHP:
1
2
3
4
if ($ip_van_client == 'jouwip')
{
  header('HTTP 403 / Access Denied');
}
.

Een links database zul je gewoon goed bij moeten houden, met de hand en selectief zijn voor mensen die je erin laat.

[ Voor 47% gewijzigd door Skaah op 13-06-2004 13:33 ]


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Skaah heel erg bedankt voor je uitleg. Daar heb ik echt iets aan. Ik ben het met je eens dat als iemand echt een redirect ofzo op zijn pagina wil zetten dat hij dit altijd zou kunnen doen doormiddel van ip adres een andere pagina te leveren, maar des-al-niet-te-min wil ik zoveelmogelijk voorkomen dat pagina's doorgelinkt worden naar sponcors en andere vreselijke dingen waar mijn bezoekers nu eenmaal geen belangstelling voor hebben. Hoevaak het niet gebeurd is dat mensen via een linkje via een redirect een virus op hun systeem hebben gekregen of in een vreselijke popup hel kwamen zijn niet op één hand te tellen.

Met preg_math kan ik dus al kijken of er code op de pagina staat die niet toegestaan is. Dat is nummero 1 :). En een 404 ofzo die weet ik ook al af te vangen van de pagina zelf. Het volgende probleem is de volgende: Hoe controleer je de linkjes en plaatjes op de betreffende pagina op grootte, en op reditects en foutmeldingen. Aan welke functie moet ik dan denken en kan ik het beste gebruiken? Ik heb er nogal een gewoonte van dat ik scripts maak die veel te ingewikkeld zijn. In de eerste instantie zou ik zeggen gebruik die pregmatch en loop door de pagina waar je bij elk teken controleert of er mogelijk een src= of een href voorkomt. Als dat zo is doe je ding.

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Voor plaatjes:

Maak een array met daarin alle verwijzingen naar plaatjes die je vindt in een pagina. Vergeet niet dat je met absolute paden moet werken.

Haal alle plaatjes binnen met $img = file_get_contents(). Controleer de lengte van $img met strlen.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Skaah schreef op 15 juni 2004 @ 09:24:
Voor plaatjes:
Maak een array met daarin alle verwijzingen naar plaatjes die je vindt in een pagina. Vergeet niet dat je met absolute paden moet werken.
Haal alle plaatjes binnen met $img = file_get_contents(). Controleer de lengte van $img met strlen.
Kun je niet getimagesize gebruiken? Als die namelijk een error geeft is het bestand niet aanwezig of is het geen afbeelding. Wat ook leuk is om te weten.

Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Maar hoe krijg ik die array met de locaties van de plaatjes. Als ik een url heb dan is het verder niet zo moeilijk te kijken of de plaatjes bestaan en de grootte van de plaatjes is dan ook wel te controleren (de grootte betreffende hoeveel pixels width en height moet ik nog uitzoeken). Maar hoe krijg ik die url's... toch met pregmatch?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Je weet toch de html-bron van zo'n pagina? Met een preg_match kun je alle plaatjes daaruit halen.
PHP:
1
2
3
4
5
6
$html = file_get_contents('http://www.tweakers.net/nieuws/');
preg_match_all("![img][\"']?(.*?)[\"'>]!i",$html,$matches);

echo[/img]';
print_r($matches);
echo '</pre>';


code:
1
2
3
4
5
6
7
8
9
![img][\"']?(.*?)[\"'[/img]]!i
 |          |    |||  ||     + einde
 |          |    |||  |+totdat je een van deze tekens tegenkomt
 |          |    |||  +einde match
 |          |    ||+elk teken, zovaak je wilt (*)
 |          |    |+begin met matchen
 |          |    +0 of 1 keer (dus: optioneel)
 |          +een van deze tekens
 +begin <img /> tag

[ Voor 48% gewijzigd door Skaah op 17-06-2004 12:29 ]


Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Ik heb ook een keer zo iets gemaakt (ietsje anders), ook gewoon met php en reg. expressies, werkte prima :)
met fopen en regex kom je al een heel eind :)

Maar let wel op; veel scripts e.d. kun je dus in verschillende manieren typen... bijv het gebruik van " en ' werkt vaak allebei, dus op de plaatsen van ' en " zul je veelal wildcards moeten gebruiken
In de eerste instantie zou ik zeggen gebruik die pregmatch en loop door de pagina waar je bij elk teken controleert of er mogelijk een src= of een href voorkomt. Als dat zo is doe je ding.
Zo heb ik het ook gedaan :)

[ Voor 28% gewijzigd door FireFoz op 17-06-2004 13:00 ]

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Skaah schreef op 17 juni 2004 @ 12:24:
Je weet toch de html-bron van zo'n pagina? Met een preg_match kun je alle plaatjes daaruit halen.
PHP:
1
2
3
4
5
6
$html = file_get_contents('http://www.tweakers.net/nieuws/');
preg_match_all("![img][\"']?(.*?)[\"'>]!i",$html,$matches);

echo[/img]';
print_r($matches);
echo '</pre>';


code:
1
2
3
4
5
6
7
8
9
![img][\"']?(.*?)[\"'[/img]]!i
 |          |    |||  ||     + einde
 |          |    |||  |+totdat je een van deze tekens tegenkomt
 |          |    |||  +einde match
 |          |    ||+elk teken, zovaak je wilt (*)
 |          |    |+begin met matchen
 |          |    +0 of 1 keer (dus: optioneel)
 |          +een van deze tekens
 +begin <img /> tag
Prima, ik ga daar eens mee aan de slag... eens kijken of ik zoiets kan opstellen...

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Hoeveel tijd informatici stoppen in het automatiseren van een proces.... Ik denk dat het niet echt lonend is in dit geval. Alle mooie menu's etc maak je hiermee onmogelijk. Redirects nadat op een ding is geklikt wordt ook onmogelijk, enz enz. Je zou kunnen controleren of een redirect verwijst binnen de huidige pagina, maar ja, www.windowsupdate.com verwisjt ook naar windowsupdate.microsoft.ocm. Heel lastig om die grenzen te stellen, lijkt me.

Wist iemand al dat niet zo gek lang geleden bij bol.com de orders gewoon gefaxt werden? :)
Pagina: 1