[PHP/SQL] Omgekeerde LIKE

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Ik wil een blacklist maken voor urls. Die blacklist bestaat uit een tabel met domeinen, bijv google.com

Nou wil ik dus per url checken of deze op de blacklist staat. Het probleem is dat ik dan eerst het domein uit die url moet halen, wat eigenlijk onmogelijk is om 100% zeker te doen. (zie ook [rml][ php] Domein met dubbele tld's uit url halen[/rml] )

Wat ik dus eigenlijk moet doen, is kijken of de waarde uit die blacklist voorkomt in de url, en in plaas van andersom (vandaar, een omgekeerde LIKE). Ik zou dan dus eerst alle rijen uit de tabel moeten selecten voor elke check. Nou is dat opzich wel te doen maar die blacklist kan nog wel eens flink oplopen tot duizende rijen. Ik vind het dan een beetje lomp om dat dan voor elke check te doen. Weet iemand een betere oplossing? :)

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

code:
1
2
3
SELECT iets
FROM nogwat
WHERE jouwurl LIKE CONCAT('%', hetveldwaarinhetstaat, '%')

Zoiets misschien? Wellicht moet die concat anders, maar dit zal in de buurt komen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Met PHP moet je toch zonder problemen altijd 100% zeker weten het domein uit een url kunnen halen? :?

Heb ff wat in mekaar gestoken met domme namen voor de variabelen. Maar volgens mij werkt dit toch wel aardig hoor. Werkt met en zonder 'http://' ervoor, met en zonder dubbele tld's, met en zonder / aan het einde of eventuele extra zaken als index.php.
PHP:
1
2
3
4
5
6
7
8
$url = "www.nachos.tk";

preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $matches);
$bla = $matches[2];

$iets_met_een_array_of_zo = explode("/", $bla);

echo("Het domein is: " . $iets_met_een_array_of_zo['0']);


Maarja, moet nog wat slaap in halen dus ik zou me wellicht ook kunnen vergissen hoor ;)


Edit:
Als je alleen het domein, dus zonder 'www' wilt weten, kan je gewoon nog een preg_match op $bla lostlaten.

[ Voor 14% gewijzigd door Blorgg op 17-03-2005 22:49 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Blorgg schreef op donderdag 17 maart 2005 @ 22:47:
Met PHP moet je toch zonder problemen altijd 100% zeker weten het domein uit een url kunnen halen? :?

Heb ff wat in mekaar gestoken met domme namen voor de variabelen. Maar volgens mij werkt dit toch wel aardig hoor. Werkt met en zonder 'http://' ervoor, met en zonder dubbele tld's, met en zonder / aan het einde of eventuele extra zaken als index.php.
PHP:
1
2
3
4
5
6
7
8
$url = "www.nachos.tk";

preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $matches);
$bla = $matches[2];

$iets_met_een_array_of_zo = explode("/", $bla);

echo("Het domein is: " . $iets_met_een_array_of_zo['0']);


Maarja, moet nog wat slaap in halen dus ik zou me wellicht ook kunnen vergissen hoor ;)


Edit:
Als je alleen het domein, dus zonder 'www' wilt weten, kan je gewoon nog een preg_match op $bla lostlaten.
En wat dan met URLs als dit?
[norml]http://dit.is.een.subdomein.van.domein.co.uk[/]
Dan heb je toch enigszins een probleempje. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-08 20:27
Dit stukje SQL geeft je de host:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
                                SUBSTRING(
                                        veld,
                                        1,
                                        LOCATE(
                                                "/",
                                                veld,
                                                8
                                        )-1
                                ) AS host
FROM
                                tabel
HAVING
 host NOT IN(SELECT domein FROM blacklist)


(jaa, die SUBSELECT heb je niet echt nodig en die HAVING kun je omschrijven naar een WHERE, het gaat hier om het idee).

[ Voor 19% gewijzigd door Skaah op 17-03-2005 23:01 . Reden: Oh ja, 't is MySQL en zonder de subselect werkt het ook in 3.23. ]


Acties:
  • 0 Henk 'm!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
-NMe- schreef op donderdag 17 maart 2005 @ 22:55:
[...]

En wat dan met URLs als dit?
[norml]http://dit.is.een.subdomein.van.domein.co.uk[/]
Dan heb je toch enigszins een probleempje. ;)
Dat ligt er maar net aan wat je precies wilt weten nietwaar?
Als je echt alleen het domein zonder evt. subdomeinen wilt weten moet je met een lijst van TLD's werken en dan terug werken vanaf 'http://dit.is.een.subdomein.van.domein.co.uk/hiernogwatextra.bla/iets.html' naar 'dit.is.een.subdomein.van.domein.co.uk' en dan TLD met het stukje tussen de . voor het TLD en die daarvoor('.domein.co.uk' ). Dat is dan alsnog 100% zeker mits je lijst met TLD's up to date is ;)

Maar als je alleen geinteresseerd bent in 'dit.is.een.subdomein.van.domein.co.uk' dan ben je met bovenstaande code al klaar :)

[ Voor 24% gewijzigd door Blorgg op 17-03-2005 23:07 ]


Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Blorgg schreef op donderdag 17 maart 2005 @ 23:04:
[...]


Dat ligt er maar net aan wat je precies wilt weten nietwaar?
Als je echt alleen het domein zonder evt. subdomeinen wilt weten moet je met een lijst van TLD's werken en dan terug werken vanaf 'http://dit.is.een.subdomein.van.domein.co.uk/hiernogwatextra.bla/iets.html' naar 'dit.is.een.subdomein.van.domein.co.uk' en dan TLD met het stukje tussen de . voor het TLD en die daarvoor('.domein.co.uk' ). Dat is dan alsnog 100% zeker mits je lijst met TLD's up to date is ;)

Maar als je alleen geinteresseerd bent in 'dit.is.een.subdomein.van.domein.co.uk' dan ben je met bovenstaande code al klaar :)
En wat nou als ik http://co.uk.domein.com heb? :) Volgensmij kan het niet hoor, ook niet met lijst :)
Nou is zo'n domein natuurlijk wel een rare, maar het idee van een blacklist is natuurlijk dat ze echt keihard geblacklist zijn, en niet met een "work-around" er toch doorheen kunnen komen...

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Voor het tld zoek je natuurlijk altijd vanaf het einde. Ik zie niet in waarom bovenstaand voorbeeld een probleem op moet leveren.

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!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Inderdaad, dat levert geen enkel probleem op. Bovendien, welke malloot gaat er nou serieus een TLD als domeinnaam registreren? ;)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Blorgg schreef op vrijdag 18 maart 2005 @ 15:04:
Inderdaad, dat levert geen enkel probleem op. Bovendien, welke malloot gaat er nou serieus een TLD als domeinnaam registreren? ;)
offtopic:
Euh, het opgeworpen probleem is hetzelfde als bijvoorbeeld http://nl.wikipedia.org, waar nl dus het subdomein is. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
http://nl3.php.net/parse_url

Dan weet je tenminste zeker dat je de juiste host hebt, en dan is het simpel...

Vormkracht10


Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Heeft iemand heel toevallig een lijst met alle tld's inclusief domeinen zoals co.uk ?
Ik kan namelijk alleen de lijst vinden van de eind-tld's, zoals .uk

http://www.norid.no/domenenavnbaser/domreg-alpha.html
http://data.iana.org/TLD/tlds-alpha-by-domain.txt

@markVe: alleen als je dus een lijst hebt...

[ Voor 12% gewijzigd door FireFoz op 18-03-2005 16:06 ]

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 10-09 22:39
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$url = "www.domein.sub.tdl";

if( substr( $url, -1 ) != "/" ){
    $url = $url . "/";
    }

$url = str_replace("http://", "", $url );
$url = explode("/", $url );
$url = $url[ 0 ];

?>


Dat zou toch redelijk altijd moeten lukken volgens mij..

Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
.Peter schreef op vrijdag 18 maart 2005 @ 16:06:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$url = "www.domein.sub.tdl";

if( substr( $url, -1 ) != "/" ){
    $url = $url . "/";
    }

$url = str_replace("http://", "", $url );
$url = explode("/", $url );
$url = $url[ 0 ];

?>


Dat zou toch redelijk altijd moeten lukken volgens mij..
Ik moet hem juist zonder sub hebben..

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

  • twanvl
  • Registratie: Februari 2005
  • Laatst online: 22-08 11:42
Wat als je gewoon meerdere combinaties test? Voor een blacklist zou dit niet uit moeten maken. Dus als je invoer "www.domein.sub.tdl" test je gewoon op "domein.sub" en "domein" en eventueel nog meer combinaties, echt veel zullen het er nooit worden.

Acties:
  • 0 Henk 'm!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
-NMe- schreef op vrijdag 18 maart 2005 @ 15:06:
[...]

offtopic:
Euh, het opgeworpen probleem is hetzelfde als bijvoorbeeld http://nl.wikipedia.org, waar nl dus het subdomein is. :P
Klopt. Maar gelukkig maakt dat niet uit aangezien je van achteren naar voren werkt :)

Heb even bovenstaand scriptje wat verder uitgewerkt, denk dat de meeste bugs er wel uit zijn maar voel je vrij om het even te testen en feedback te geven: http://www.nachos.tk/get_domain_thingy/index.php
source: http://www.nachos.tk/get_domain_thingy/get_domain.txt

Ik heb trouwens deze TLD lijst gebruikt.
Pagina: 1