Anonym58508583 Skrevet 5. november 2012 Del Skrevet 5. november 2012 Halla! Jeg har laget en php mailsend side. det jeg vil trenge er logging, for å blokkere misbrukere. Kan noen forklare meg hvordan jeg kan få logget dette? Er usikker om webhost kan gi meg logger eller ikke. derfor, om det finnes andre måter, blir jeg veldig glad for litt hjelp. Takk! Lenke til kommentar
Anonym58508583 Skrevet 6. november 2012 Forfatter Del Skrevet 6. november 2012 Fant ut av det. Løsning: la til header bcc til min egen mail, og la mail fra den i et filter, enkel og grei logging. Lenke til kommentar
emilkje Skrevet 6. november 2012 Del Skrevet 6. november 2012 Heihei Du har ikke spesifisert hva du definerer som misbruk (antall mail pr. tidsenhet fra bestemt bruker?). Du har heller ikke sagt noe om hvilke verktøy/programvare du har tilgjengelig (database etc), så det blir litt vanskelig å gi deg en eksakt løsning. Det jeg derimot kan gi deg en generell retning slik at du kan implementere dette selv etter dine egne krav. I PHP har du en rekke server-variabler som henter informasjon fra klienten/brukeren inkludert $_SERVER['REMOTE_ADDR'] som henter den eksterne IP adressa. Denne kan du bruke for å identifisere unike brukere (så lenge de ikke sitter bak en rullerende proxy). Et mer robust system kan selvfølgelig implementeres i form av autentisering og peke sjekken mot brukernavn, men jeg tar ikke utgangspunkt i at du har laget dette. Her har du et enkelt eksempel som tar i bruk en relasjonsdatabase for å kontrollere ip adresser. logger.php <?php $config = array( 'db_host' => 'localhost', 'db_engine' => 'mysql', 'db_name' => 'mailer', 'db_table' => 'log', 'db_user' => 'root', 'db_password' => 'password', 'time_constraint' => 2 //Tid mellom hver mail i minutter ); $db = new PDO("{$config['db_engine']}:host={$config['db_host']};dbname={$config['db_name']};charset=UTF-8", $config['db_user'], $config['db_password']); function is_valid($remote_ip) { $count = 0; try { $sql = "SELECT * FROM :table l WHERE ip = :remote_ip AND DATEDIFF(minute, l.time, NOW()) < :minutes"; $stmt = $db->prepare($sql); $stmt->execute(array( ':table' => $config['db_table'], ':remote_ip' => $remote_ip, ':minutes' => $config['time_constraint'] )); $count = $stmt->rowCount(); } catch(PDOException $ex) { //Det skjedde noe feil med spørringen. die($ex); } return $count > 0 ? true : false; } Dette kan implementeres i løsningen din slik: <?php require_once('logger.php'); if(is_valid($_SERVER['REMOTE_ADDR'])) { //Send mail } else { echo "Du kan ikke sende ny mail enda."; } databasetabellen ser i følge eksemplet slik ut: ip (VARCHAR) NOT_NULL time (DATE_TIME) NOT_NULL Selvfølgelig vil du måtte registrere/oppdatere ip adressen og tiden mailen ble sendt når dette er utført, slik at loggen oppdateres, men det klarer du helt sikkert å legge til selv Jeg har ikke testet denne koden så det er helt sikkert feil der, men håper det gir en viss oversikt over hvordan du kan gå frem for å løse problemet Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå