Land uitsluiten van bezoeken specifieke website pagina's

Status
Niet open voor verdere reacties.

damnsharp

Terugkerende gebruiker
Lid geworden
6 jan 2012
Berichten
1.394
Goedemorgen,
Ik weet dat het met regels code in htaccess bestand het mogelijk is om bezoekers uit een land uit te sluiten van het bezoeken van een website.
Maar zou dat ook kunnen voor specifieke pagina's?
Dus dat alle bezoekers die uit land X komen de pagina's A, B en C niet te zien krijgen.

Thanks!
 
Dit zou wel in .htaccess kunnen met Rewritecond. Maar ik denk dat het minder onderhoud vergt als je dit in PHP afhandelt via een ip-lookup tool.

Met .htaccess zal je waarschijnlijk een hele reeks IP-reeksen hardcoded in je bestand zetten. En dit geeft false-positives omdat er vanwege het schaarste aan IPv4 adressen ook IP-blokken verhandeld worden. Dus er is een kans dat een Nigeriaans blok met IP-adressen misschien wel overgedragen zijn aan een Nederlandse eigenaar, of een Duitse of een andere uit een betrouwbaar land. En die personen vallen dan weer buiten de boot.

Je kan via een cronjob de .htaccess updaten, maar een ip-2-country API lijkt mij vaak effectiever omdat die zichzelf geüpdated houden.
 
Dank je wel Aar voor de uitleg. :thumb: Daardoor kon ik gerichter verder zoeken en heb nu software gevonden (php) die kan wat ik wil en gebruik maakt van de MaxMind GeoIP2 Country Database.
De vraag is opgelost :)
 
Die kan ik zeker aanraden!
 
Topic staat op opgelost maar van mij nog deze functie die ik op diverse websites gebruik.
Korte code voorbeelden voor diverse programmeertalen vind je hier

Zonder registratie gratis 1000 request per dag

Update maart 2023
Registratie voor een gratis API Key bij iplocate.io/signup (klik) geeft gratis 1000 aanvragen per dag.
(zonder registratie max. 50 per dag, en méér dan 1000 per dag in een betaald plan)

apikey.jjpg.jpg

PHP:
function ip2geo ($ip = "", $item = "", $apikey = "") {
    if (filter_var($ip, FILTER_VALIDATE_IP) === false) return null;
    $url = "https://www.iplocate.io/api/lookup/".$ip."/json?apikey=".$apikey."&callback=";
    $ch = curl_init();
    if ($ch === false) return null;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    $response = curl_exec($ch);
    curl_close($ch);
    if ($response === false) return null;
    $data = json_decode($response);
    if (is_null($data)) return null;
    $_arr = (array) $data;
    $_item = trim(strval($item));
    if (empty($_arr)) return null;
    if (array_key_exists('error', $_arr)) return null;
    if ($_item == "") return $_arr;
    if (array_key_exists($_item, $_arr)) return $_arr[$_item];
    return null;
}

Voorbeelden:

PHP:
// array met alle geo gegevens
print_r(ip2geo('101.203.172.24'));

// idem, meer gratis aanvragen met api key
print_r(ip2geo('101.203.172.24', '', 'xxxxxx'));

// specifieke info opvragen, bijvoorbeeld de 2-letter landcode
echo ip2geo('101.203.172.24', 'country_code');

// idem, meer gratis aanvragen met api key
echo ip2geo('101.203.172.24', 'country_code', 'xxxxxx');

Een voorbeeld waarin alle landen worden geblokkeerd behalve "NL,BE,LU,DE"

PHP:
$geoCC = "NL,BE,LU,DE";

$apiKey = "HIER_DE_API_KEY_INVULLEN";

$ip = $_SERVER['REMOTE_ADDR'];
// $ip = "101.203.172.24"; // test

$result = ip2geo ($ip, "country_code", $apiKey);

$blockCC = false;
if ($ip == "127.0.0.1") {
    // localhost niet blokkeren
} elseif (is_null($result) || empty($result)) {
    // als api geen/leeg antwoord geeft dan niet blokkeren
} elseif (stripos($geoCC, $result) === false) {
    $blockCC = true;
}

echo "<br>Landcode: " . $result;
if ($blockCC) {
    echo "<br>Contactformulier NIET versturen";
} else {
    echo "<br>Verstuur Contactformulier ";
}

In het array $_arr
Latitude/longitude zijn beide een getal (type double/float).
De overige array items zijn een tekst (type string).
Als een array item geen waarde heeft dan is het Null.
 
Laatst bewerkt:
Nuttig voor de bezoeker van dit forum dit soort toevoegingen, bedankt @bron :thumb:
 
Is dit script misschien de moeite om op PHPhulp.nl te plaatsen?
Daar hebben we ook een script-library waar dit in zal passen.
 
Is dit script misschien de moeite om op PHPhulp.nl te plaatsen?
Daar hebben we ook een script-library waar dit in zal passen.
Geen auteursrechten, plaats het gerust :thumb:
 
Top Bron, bedankt voor deze.
Je hebt ook plug-ins die beveiligen en die je kan instellen op landen.
Defender is er zo eentje.
 
Laatst bewerkt:
@femke, de Defender plugin heeft idd een uitgebreide lijst aan features, incl ip2geo. En bij deze plugin mogen we er wel vanuit gaan dat er geen security bugs in zitten ;)
 
Ik heb op een andere website Wordfence gezet. Die heeft het ook.
Makkelijk in te stellen aangezien de instellingen zoals ze zijn als je deze installeert, al goed genoeg zijn.

Maar ja, zo heb je ik weet niet hoeveel beveiligingsplug-ins. En het is maar waar je voorkeur naar uit gaat.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan