infostabil > edb.internet.* > edb.internet.webdesign.serverside.php

Bertel Lund Hansen (06.05.2020, 17:32)
Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
sædvanlig) selv synes er smart.

Jeg har fundet en webside hvor man kan bede om lister med
ip-intervaller der tilhører et land. Jeg har så lavet et
Python-script der kan samle listerne fra udvalgte lande,
komprimere dem så nabointervaller slås sammen til ét, og derefter
oversætte ip-numrene til decimaltalsintervaller som så gemmes i
en fil.

Rå fil (.cn = China):

1.0.1.0-1.0.1.255
1.0.2.0-1.0.3.255
1.0.8.0-1.0.15.255
1.0.32.0-1.0.63.255
...
(Den opmærksomme læser vil have opdaget at to af intervallerne er
naboer)

Færdig fil klar til brug:

<?php
$banned_intervals = [
[16777472,16778239],
[16779264,16809983],
[16842752,16843007],
[16843264,16875519],
...

I en mappe på serveren lægger jeg så denne liste samt et script
der tjekker brugeren og exit'er hvis det er en uønsket gæst. De
ser kun en tom side.

Scriptet skal bare inkluderes (med den rigtige serversti) i
begyndelsen af index.php.

Den version jeg selv bruger, gemmer en logfil med 6 data per
ønsket bruger sådan at man kan få en statistik der ser sådan ud:

[..]

Aflæsningen af hvilket land ip-nummeret tilhører, forudsætter at
der er adgang til de nødvendige lister. Det betyder at der skal
hentes en ny hver gang der dukker et ip-nummer op uden tilhørende
nationalitet.

Er det noget som andre kan have interesse i? Jeg stiller gerne
alle relevante scripts til rådighed, både Python- og PHP-scripts,
men måske Python-operationerne er for indviklede for hvermand
(stierne er lokale og specifikke)? Det PHP-script der tjekker
brugeren, er derimod rimeligt simpelt at forstå og at anvende, og
man kan let fjerne de logninger som jeg selv bruger.

Jeg vil ikke offentliggøre filerne her medmindre I overbeviser
mig om at det ikke er noget problem. Ellers kan I få dem i en
mail.

PS. Jeg spærrer også ved at aflæse brugerens tld hvis den er
tilgængelig. Der er nemlig nogle domæner fra ét land der hostes i
et andet land.

PPS. Jeg kan ikke garantere for korrektheden. Det website jeg
bruger, er ikke altid enig med sig selv. Men scriptet har fjernet
en stor mængde uønskede besøg.
Arne Vajhøj (06.05.2020, 18:38)
On 5/6/2020 11:32 AM, Bertel Lund Hansen wrote:
> Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
> sædvanlig) selv synes er smart.
> Jeg har fundet en webside hvor man kan bede om lister med
> ip-intervaller der tilhører et land.


Sådanne findes - bl.a. MaxMind.

[..]
> [16842752,16843007],
> [16843264,16875519],
> ...
> I en mappe på serveren lægger jeg så denne liste samt et script
> der tjekker brugeren og exit'er hvis det er en uønsket gæst. De
> ser kun en tom side.
> Scriptet skal bare inkluderes (med den rigtige serversti) i
> begyndelsen af index.php.


En god use case for auto_prepend_file måske?

> PPS. Jeg kan ikke garantere for korrektheden. Det website jeg
> bruger, er ikke altid enig med sig selv. Men scriptet har fjernet
> en stor mængde uønskede besøg.


Geolocation er aldrig perfekt.

Arne
Kim Ludvigsen (06.05.2020, 19:02)
Den 06.05.2020 kl. 17.32 skrev Bertel Lund Hansen:
> Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
> sædvanlig) selv synes er smart.


Sådan har jeg det også, når jeg laver noget nyt. Desværre holder
følelsen ikke altid i længden.

> PPS. Jeg kan ikke garantere for korrektheden. Det website jeg
> bruger, er ikke altid enig med sig selv. Men scriptet har fjernet
> en stor mængde uønskede besøg.


Jeg ville ikke turde/ønske at fjerne adgang, medmindre det er et klart
forsøg på hacking, og selv der ville jeg normalt ikke gide gøre noget.
Det generer vel ikke, at der er ekstra trafik på serveren (den fjernes
jo så alligevel ikke helt), og du risikerer at nægte legitim trafik
adgang til siderne.

Hvorfor ikke bare acceptere trafikken og så i stedet sortere dem fra i
statistikken? Der betyder det jo ikke så meget, om du får sorteret en
for meget fra eller til i en statistik.
Bertel Lund Hansen (06.05.2020, 19:04)
Arne Vajhøj skrev:

> En god use case for auto_prepend_file måske?


Måske - hvis man er sikker på at man vil udelukke de samme
nationer på alle sine websider. Jeg har forskellige målgrupper på
forskellige sider.
Bertel Lund Hansen (06.05.2020, 19:24)
Kim Ludvigsen skrev:

> Hvorfor ikke bare acceptere trafikken og så i stedet sortere dem fra i
> statistikken?


Fordi jeg så skal opdatere løbende.

Jeg bruger scriptet på obese.dk og fiduso.dk. Begge websider er
decideret rettet mod dansktalende, så det vil være et mindretal
der bliver afskåret. Jeg har ikke spærret for Thailand ...

> Der betyder det jo ikke så meget, om du får sorteret en
> for meget fra eller til i en statistik.


Nej, det er mere irritation over dem der forøger at hacke
serveren, der har motiveret mig.
Kim Ludvigsen (06.05.2020, 19:41)
Den 06.05.2020 kl. 19.24 skrev Bertel Lund Hansen:
> Kim Ludvigsen skrev:
>> Hvorfor ikke bare acceptere trafikken og så i stedet sortere dem fra i
>> statistikken?

> Fordi jeg så skal opdatere løbende.


Jeg forstår ikke forskellen. Hvis din løsning virker automatisk til
blokering af sidevisninger, virker den vel også automatisk til at
forhindre, at der gemmes i statistikken.

Nu er det nok ikke så sandsynligt i øjeblikket, men det kunne jo tænkes,
at en søgemaskine som Google oprettede et datacenter i Kina eller et
andet blokeret land, som så skulle bruges af deres webcrawler. I så
fald, ville siderne risikere at blive slettet fra søgemaskinen.
Jan Hansen (06.05.2020, 21:17)
Bertel Lund Hansen skrev:

> Er det noget som andre kan have interesse i? Jeg stiller gerne
> alle relevante scripts til rådighed, både Python- og PHP-scripts,
> men måske Python-operationerne er for indviklede for hvermand


Det er for mig i hvert fald. Jeg hentede en ntpserver på
<https://github.com/fygrave/honeyntp/blob/master/ntpserver.py>
og brugte et halvt døgn på at få den til at lyve en time under
sommertid. Kan det ikke laves i php i stedet for? Det er man jo
alligevel tvunget til at lære for at lave hjemmeside.

> Jeg vil ikke offentliggøre filerne her medmindre I overbeviser
> mig om at det ikke er noget problem.


Det er nok ikke noget problem, de kan jo ligge i en mappe, hvor
der ikke er nogen adgang. PHP filerne kan så vises frem med
highlight_file fra en anden mappe.
Python filerne kan om ikke andet pakkes med zip.
Bertel Lund Hansen (06.05.2020, 21:32)
Kim Ludvigsen skrev:

>> Fordi jeg så skal opdatere løbende.


> Jeg forstår ikke forskellen.


Du har ret. Jeg havde min tidligere løsning i baghovedet.
Bertel Lund Hansen (06.05.2020, 21:44)
Jan Hansen skrev:

>> Er det noget som andre kan have interesse i? Jeg stiller gerne
>> alle relevante scripts til rådighed, både Python- og PHP-scripts,
>> men måske Python-operationerne er for indviklede for hvermand


> Det er for mig i hvert fald. Jeg hentede en ntpserver på
> <https://github.com/fygrave/honeyntp/blob/master/ntpserver.py>


Den er sørme også indviklet. Men jeg bliver skeptisk når jeg ser
sådan noget som dette her:

def _to_int(timestamp):
"""Return the integral part of a timestamp.
Parameters:
timestamp -- NTP timestamp
Retuns:
integral part
"""
return int(timestamp)

Alt mellem """ er kommentarer, så funktionen er her:

def _to_int(timestamp):
return int(timestamp)

Skulle _to_int() være så meget bedre forklarende end int() at det
kræver en hel funktion?

> og brugte et halvt døgn på at få den til at lyve en time under
> sommertid. Kan det ikke laves i php i stedet for?


Man kan lyve så tosset man vil med PHP, men det kan nok ikke
pille ved opsætningen af en veldrevet server. Skal du virkelig
have serveren til at lyve, eller er det nok på hjemmesiden?

Kan du ikke bare stille om på uret?

> Det er man jo alligevel tvunget til at lære for at lave
> hjemmeside.


Ja. PHP er sådan set nemt at gå til, men det er desværre et
kaotisk organiseret sprog.

> Det er nok ikke noget problem, de kan jo ligge i en mappe,[...]


Jeg kikker på det i morgen.
Jan Hansen (06.05.2020, 23:26)
Bertel Lund Hansen skrev:

> Jan Hansen skrev:
> >> Er det noget som andre kan have interesse i? Jeg stiller gerne
> >> alle relevante scripts til rådighed, både Python- og PHP-scripts,
> >> men måske Python-operationerne er for indviklede for hvermand

> > Det er for mig i hvert fald.


Det jeg mente var, at sådan noget python er svært for mig, og om ikke
dine python filer kunne laves i php.

[..]
> """
> return int(timestamp)
> Alt mellem """ er kommentarer, så funktionen er her:
> def _to_int(timestamp):
> return int(timestamp)
> Skulle _to_int() være så meget bedre forklarende end int() at det
> kræver en hel funktion?


Sikkert ikke, og det bliver ikke bedre af, at han skriver variabel og
funktions navne på engelsk, så flader det hele i mine øjne ud til
det rene volapyk. Det havde været meget nemmere, hvis han skrev urdu
eller serbokroatisk: Står der noget engelsk-agtigt, skal jeg finde
forklaringen i python-manualen, står der noget anderledes, skal jeg
finde forklaringen andetsteds i samme fil. I php kan man da i det
mindste kende variablerne på $.

> Man kan lyve så tosset man vil med PHP, men det kan nok ikke
> pille ved opsætningen af en veldrevet server. Skal du virkelig
> have serveren til at lyve, eller er det nok på hjemmesiden?


Det var nu ikke på hjemmeside, jeg skulle bruge den ntp-server.
Jeg har et kamera mage til
[..]
Det er så smart lavet, at det virker via noget direktX eller aktivX
eller hvad det nu hedder, noget der kun er i windows. I opsætningen
på det kan man vælge tidszone, og skrive adresse og port på en
ntp-server, men sommertid har konstruktøren åbenbart ikke hørt om.
Jeg havde så valget imellem at skulle starte windows og skifte
tidszone på det ved skift mellem sommer og vintertid, eller jeg
kunne lave noget ntp, der skifter om for det.

Skulle andre have noget elektronik med samme fejl er løsningen:
udskift

def system_to_ntp_time(timestamp):
return timestamp + NTP.NTP_DELTA

med

def system_to_ntp_time(timestamp):
localtid = time.localtime()
if localtid.tm_isdst>0:
timestamp = timestamp + 3600
return timestamp + NTP.NTP_DELTA
Bertel Lund Hansen (07.05.2020, 05:38)
Jan Hansen skrev:

> Det jeg mente var, at sådan noget python er svært for mig, og om ikke
> dine python filer kunne laves i php.


Nå jo, det kunne de godt. Men Python er sådan ca. 100 gange
hurtigere at skrive programmer i fordi det er så smart et sprog.

Jeg ved ikke om jeg orker at lægge det om til PHP, men det ville
ikke være første gang jeg lavede den operation.
Bertel Lund Hansen (07.05.2020, 19:37)
Bertel Lund Hansen skrev:

> Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
> sædvanlig) selv synes er smart.


Nu kan I få filerne at se. De ligger på det domæne der ender på
lundhansen.dk og som starter med temp.

Hvis I skriver den webadresse og tilføjer links+html, åbner en
side med fire links.

Hvis I vil hente filerne, skal I bare bruge det nederste link.
Jan Hansen (07.05.2020, 22:38)
Bertel Lund Hansen skrev:

> Hvis I vil hente filerne, skal I bare bruge det nederste link.


Så er der lidt at øve sig på igen.
Hvad skal der ligge i mappen
originals = AC_base+'csv_files_originals/'
er det IP2LOCATION-LITE-DB1.CSV
eller
GeoLite2-Country-Blocks-IPv4.csv
eller noget helt tredie?
Arne Vajhøj (08.05.2020, 04:44)
On 5/6/2020 3:17 PM, Jan Hansen wrote:
> Kan det ikke laves i php i stedet for? Det er man jo
> alligevel tvunget til at lære for at lave hjemmeside.


PHP er uhyre udbredt til hjemmesider og en mulighed
hos næsten alle web hoteller.

Men du er ikke nødt til at bruge PHP til en
(dynamisk) hjemmeside.

Du kan vælgeÆ C# (ASP.NET), VB.NET (ASP.NET), Java,
Ruby (RoR), JavaScript (Node), Python og flere andre.

Arne
Bertel Lund Hansen (08.05.2020, 07:17)
Arne Vajhøj skrev:

> Du kan vælgeÆ C# (ASP.NET), VB.NET (ASP.NET), Java,
> Ruby (RoR), JavaScript (Node), Python og flere andre.


.... afhængigt af serverens opsætning. Hos den hoteludbyder jeg
har valgt, er Python f.eks. (desværre) ikke en mulighed.