Hoi ik heb een probleem ik heb een cryptocurrentie faucet waar mensen om de 24 uur doormiddel van hun adres munten kunnen halen. deze slaat het ipnr adress tijd en het aantal wat ze hebben gekregen in een mysql database.
maar nu zijn er handige mensen bij die heel veel ip adressen gebruiken in dezelfde range nu wil ik alleen
de eerste 5 a 6 chars gebruiken van de ip om te blokken het script doet nu alleen het hele ip checken.
weet iemand hoe ik dit voorelkaar kan krijgen ?

zie onder dit is het probleem wil dus 005.101 blocken
2018-08-10 02:06:24 5.101.221.37
2018-08-10 02:07:28 5.101.221.91
2018-08-10 02:08:03 5.101.221.83
2018-08-10 02:08:51 5.101.221.52
2018-08-10 02:09:24 5.101.221.34


<?php
 protected function check_payout_time($ip_address){
                $this->ip_address = $this->DB->escape_string($ip_address);
                $interval = "7 HOUR"; // hardcoded default interval if the custom interval is messed up
                $interval_value = intval(substr($this->SETTINGS->config["payout_interval"],0,-1));
                $interval_function = strtoupper(substr($this->SETTINGS->config["payout_interval"],-1));

                if ($interval_value >= 0 && ($interval_function == "H" || $interval_function == "M" || $interval_function == "D")) {
                        $interval = $interval_value." ";
                        switch ($interval_function) {
                                case "M":
                                        $interval .= "MINUTE";
                                        break;
                                case "H":
                                        $interval .= "HOUR";
                                        break;
                                case "D":
                                        $interval .= "DAY";
                                        break;
                        }
                }

                $user_check = " AND (";
                if ($this->SETTINGS->config["user_check"] == "ip_address" || $this->SETTINGS->config["user_check"] == "both") {
                $user_check .= " `ip_address` = '". $this->ip_address ."'";


                }
                if ($this->SETTINGS->config["user_check"] == "wallet_address" || $this->SETTINGS->config["user_check"] == "both") {
                        $user_check .= ($this->SETTINGS->config["user_check"] == "both"?" OR":"")." `payout_address` = '". $this->payout_address ."'";
                }

                $user_check .= ")";
                $query = sprintf("SELECT `id` FROM `%spayouts` WHERE `timestamp` > NOW() - INTERVAL %s",
                                        $this->DB->TB_PRFX,
                                        $interval.$user_check);
                $result = $this->DB->query($query);

                if ($row = @$result->fetch_assoc()) {
                         // user already received a payout within the payout interval
                        $this->status = SF_STATUS_PAYOUT_DENIED;
                        return false;
                }
                else {
                        // All is good, payment will be given
                        return true;
                }
        }
?>

<?php
if(strpos($_SERVER['REMOTE_ADDR'], "5.101") === 0) {
echo "No access allowed!";
}
?>
Let op: Gebruikers met de zelfde provider zitten vaak in dezelfde IP-reeks (maar zijn dus verschillende gebruikers). Mobiele klanten kunnen soms zelfs hetzelfde IP-adres delen (Carrier-grade NAT). Zo'n IP (reeks) check is dus niet waterdicht.

Wat je zoekt is volgens mij (regel 25):

$user_check .= " `ip_address` LIKE '". preg_replace('/(\\.\\d+){2}$/','.%',$this->ip_address) ."'";

Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.
Ik hoop ook dat e.e.a. in een transactie staat, zodat het controleren en uitbetalen ook echt één ondeelbare actie is :p. En ja, misschien ook een idee om alles ook IPv6 compatible te maken.
Rob Doemaarwat op 11/08/2018 09:24:57

Let op: Gebruikers met de zelfde provider zitten vaak in dezelfde IP-reeks (maar zijn dus verschillende gebruikers). Mobiele klanten kunnen soms zelfs hetzelfde IP-adres delen (Carrier-grade NAT). Zo'n IP (reeks) check is dus niet waterdicht.

Wat je zoekt is volgens mij (regel 25):

$user_check .= " `ip_address` LIKE '". preg_replace('/(\\.\\d+){2}$/','.%',$this->ip_address) ."'";

Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.


heb het veranderd ben benieuwd als dit de oplossing is ben ik u reuze dankbaar
nu even alles in de gaten houden !!




[size=xsmall]Toevoeging op 11/08/2018 13:07:18:[/size]

- Ariën - op 11/08/2018 02:33:37

<?php
if(strpos($_SERVER['REMOTE_ADDR'], "5.101") === 0) {
echo "No access allowed!";
}
?>


dit is niet wat ik zoek. tor exit nodes wel worden al geblockt doormiddel van een php script.



[size=xsmall]Toevoeging op 11/08/2018 13:08:25:[/size]

Thomas van den Heuvel op 11/08/2018 11:57:03

Ik hoop ook dat e.e.a. in een transactie staat, zodat het controleren en uitbetalen ook echt één ondeelbare actie is :p. En ja, misschien ook een idee om alles ook IPv6 compatible te maken.



heb ipv6 disabled. veel te veel werk :-)




[size=xsmall]Toevoeging op 11/08/2018 23:55:29:[/size]

Rob van rhee op 11/08/2018 13:05:07

[quote="Rob Doemaarwat op 11/08/2018 09:24:57"]
Let op: Gebruikers met de zelfde provider zitten vaak in dezelfde IP-reeks (maar zijn dus verschillende gebruikers). Mobiele klanten kunnen soms zelfs hetzelfde IP-adres delen (Carrier-grade NAT). Zo'n IP (reeks) check is dus niet waterdicht.

Wat je zoekt is volgens mij (regel 25):

$user_check .= " `ip_address` LIKE '". preg_replace('/(\\.\\d+){2}$/','.%',$this->ip_address) ."'";

Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.


heb het veranderd ben benieuwd als dit de oplossing is ben ik u reuze dankbaar
nu even alles in de gaten houden !!


*** bedankt dit is wat ik zocht !! het werkt perfect !!!!!!



[size=xsmall]Toevoeging op 11/08/2018 13:07:18:[/size]

- Ariën - op 11/08/2018 02:33:37

<?php
if(strpos($_SERVER['REMOTE_ADDR'], "5.101") === 0) {
echo "No access allowed!";
}
?>


dit is niet wat ik zoek. tor exit nodes wel worden al geblockt doormiddel van een php script.



[size=xsmall]Toevoeging op 11/08/2018 13:08:25:[/size]

Thomas van den Heuvel op 11/08/2018 11:57:03

Ik hoop ook dat e.e.a. in een transactie staat, zodat het controleren en uitbetalen ook echt één ondeelbare actie is :p. En ja, misschien ook een idee om alles ook IPv6 compatible te maken.



heb ipv6 disabled. veel te veel werk :-)



[/quote]

Reageren