Gå til innhold

[Løst] PHP MailSend logging


Anbefalte innlegg

Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...