为了提高安全性和可维护性,可以对代码进行以下改进:

  1. 验证IP地址的有效性,防止恶意伪造IP地址

使用filter_var()函数验证IP地址的有效性:

$ip = $_SERVER['REMOTE_ADDR'];
if(filter_var($ip, FILTER_VALIDATE_IP)){
  //有效IP地址
} else{
  //无效IP地址,不记录
}
  1. 考虑使用预处理语句来防止SQL注入

使用预处理语句和绑定参数来防止SQL注入:

$stmt = $conn->prepare('INSERT INTO visitor_record (ip_address, browser_info, visit_time, visit_url) VALUES (?, ?, ?, ?)');
$stmt->bind_param('ssss', $ip, $browser, $time, $url);
if($stmt->execute()){
  echo '记录成功';
} else {
  echo '记录失败:' . $stmt->error;
}
$stmt->close();
  1. 使用PDO或者ORM框架来操作数据库,提高安全性和可维护性

使用PDO来操作数据库:

$dsn = 'mysql:host=$servername;dbname=$dbname';
$options = [
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES => false,
];
try {
  $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
  throw new PDOException($e->getMessage(), (int)$e->getCode());
}
$stmt = $pdo->prepare('INSERT INTO visitor_record (ip_address, browser_info, visit_time, visit_url) VALUES (?, ?, ?, ?)');
$stmt->execute([$ip, $browser, $time, $url]);
echo '记录成功';
  1. 将访问记录写入日志文件的方式改为使用日志库,如Monolog,提高日志的可读性和可操作性

使用Monolog库来记录日志:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('visitor');
$log->pushHandler(new StreamHandler('visitor.log', Logger::INFO));
$log->info('Visited', ['ip' => $ip, 'browser' => $browser, 'time' => $time, 'url' => $url]);
  1. 统计访问量时,考虑使用缓存技术来减少数据库的读取次数,提高性能

使用缓存来减少数据库的读取次数:

$cache = new Memcached();
$cache->addServer('localhost', 11211);
$key = 'visitor_count';
$count = $cache->get($key);
if($count === false){
  $sql = 'SELECT COUNT(*) FROM visitor_record';
  $result = $conn->query($sql);
  if($result){
    $row = $result->fetch_row();
    $count = $row[0];
    $cache->set($key, $count, 60); //缓存1分钟
  } else{
    echo '查询失败:' . $conn->error;
  }
}
echo '访问量:' . $count;
网站安全优化:防止攻击,提高性能

原文地址: https://www.cveoy.top/t/topic/l6dG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录