Apache:将存储记录到MySQL中 方法1:管道测井
最近我读了一篇关于。简单地说,我们的想法是通过管道将每个日志传输到MySQL:Apache:将存储记录到MySQL中 方法1:管道测井,mysql,apache,logging,sql-injection,Mysql,Apache,Logging,Sql Injection,最近我读了一篇关于。简单地说,我们的想法是通过管道将每个日志传输到MySQL: # Format log as a MySQL query LogFormat "INSERT INTO apache_logs \ set ip='%h',\ datetime='%{%Y-%m-%d %H:%M:%S}t',\ status='%>s',\ bytes_sent='%B',\ content_type='%{Content-Type}o',\ url_requested='%r',\ use
# Format log as a MySQL query
LogFormat "INSERT INTO apache_logs \
set ip='%h',\
datetime='%{%Y-%m-%d %H:%M:%S}t',\
status='%>s',\
bytes_sent='%B',\
content_type='%{Content-Type}o',\
url_requested='%r',\
user_agent='%{User-Agent}i',\
referer='%{Referer}i';" \
mysql_custom_log
# execute queries
CustomLog "|/usr/bin/mysql -h 127.0.0.1 -u log_user -plog_pass apache_logs" mysql_custom_log
# save queries to log file
CustomLog logs/mysql_custom_log mysql_custom_log
问题:
似乎未经处理的用户输入(即:user\u agent和referer)将直接传递给MySQL。
因此,此方法易受SQL注入攻击吗?如果是这样,是否有可能使其变硬
方法2:Apache模块
是一个Apache模块,它似乎执行类似的操作,即:将所有请求记录到数据库。根据文件,该模块有几个优点:
基于SQL的日志数据提取功能
比标准模块[mod_log_config]更具可配置性和灵活性
查询之间的链接保持活动状态,以节省速度和开销
任何失败的插入命令都会保留到本地文件中
不再执行日志旋转之类的任务
无需整理/交错许多单独的日志文件
然而,尽管有这些优点,mod_log_sql似乎并不流行:
文档中没有提到一个生产级用户
网上讨论很少
几个时期没有维修人员
这听起来像是对我的警告,尽管我可能错了
问题
这个模块不受欢迎的原因是什么?
它易受SQL注入攻击吗?如果是这样,是否有可能使其变硬?
哪种方法应该有更好的性能?
管道日志方法更好,因为它在日志和数据库之间创建了一个流,这可以直接反映插入/搜索的时间性能。关于管道日志的另一点是使用NoSQL数据库的可能性,该数据库可以通过特定的查询进行搜索或插入,例如ELK Stack、Elasticsearch+LogstashLog Parser+Stream和Kibana
将推荐与以下内容相关的任何阅读:
与您关于SQL注入的问题相关,它取决于您如何与数据库通信,而不管存储日志的数据库类型或方法如何。您需要以令牌为例来保护它
与apache模块相关,其目的是制作管道日志,但最后一个注释部分是2006年的,文档对用户不友好。关于管道日志的另一点是在两种方法中使用NoSQL数据库,它将使用MySQL,而不是NoSQL…我已经编辑过,添加了“可能性”一词,因为它可以通过两种方式实现。MySQL也不是一个好的选择,例如ELK堆栈、Elasticsearch+LogstashLog解析器+Stream和Kibana。我不会放弃进入集中式日志系统的可能性。然而,首先我想从我已经熟悉的ie中得到尽可能多的信息:LAMP。它取决于您与数据库的通信方式,至少在方法1中,通信是非常直接的,即插入查询而不处理用户输入。现在是注射安全的,是否可以将用户代理设置为“;是否删除表mysql\u自定义\u日志?