Suricata – 入侵检测、预防和安全工具

news2024/12/23 14:01:42

一、Suricata介绍

Suricata是一个功能强大、用途广泛的开源威胁检测引擎,提供入侵检测 (IDS)、入侵防御 (IPS) 和网络安全监控功能。它执行深度数据包(网络流量)检查以及模式匹配,在威胁检测中非常强大。
工作流程:
主要特点:
  • IDS/IPS – Suricata 是一个基于规则的入侵检测和防御引擎,它利用外部开发的规则集(例如Talos规则集和新兴威胁 Suricata 规则集)来监控网络流量中是否存在任何恶意活动、策略违规和威胁。
  • 自动协议检测——Suricata 引擎自动检测 HTTP 和 HTTPS 等协议。任何端口上的 FTP 和 SMB,并应用适当的检测和日志记录逻辑。这在检测恶意软件和 CnC 通道时派上用场。
  • Lua 脚本——Suricata 可以调用提供高级恶意软件检测的Lua脚本,以检测和解码原本难以检测的恶意软件流量。
  • 多线程——Suricata在确定网络流量时提供速度和重要性。该引擎旨在应用现代多核硬件芯片组提供的增强处理能力。

二、安装与使用Suricata

2.1、安装

参考2. Quickstart guide — Suricata 7.0.2-dev documentation
因为官方的PPA可以用于安装。要安装最新的稳定Suricata版本,请执行以下步骤:
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt-get update
sudo apt-get install suricata  jq
添加了专用的PPA存储库,更新索引后,可以安装Suricata。我们建议此时安装jq工具,因为它将有助于显示Suricata的EVE JSON输出中的信息。
安装Suricata后,您可以检查您运行的Suricata的版本、选项以及服务状态:
sudo suricata --build-info
sudo systemctl status suricata
  
执行文件:/usr/bin/suricata
配置项与rule规则集:/etc/suricata/
需要重点关注的是suricata.yaml和rules文件夹
  • suricata.yaml文件是对于suricata的软件配置。
  • rules文件夹中存放了相关的检测规则,如果在suricata运行过程中有数据包分析触发了检测规则,则会以日志的形式输出。
日志文件:/var/log/suricata/,也可以在配置文件suricata.yaml中更改default-log-dir
  • eve.json:告警和事件的详细信息
  • fast.log:告警信息简单汇总,一行内容,不是具体信息
  • stats.log:引擎统计信息,比如内存使用计数、数据包数量计数
  • suricata.log:suricata启动过程相关日志
   
基本指令操作:
升级Suricata:
sudo apt-get update
$ sudo apt-get upgrade suricata
 
删除Suricata:
sudo apt-get remove suricata
 
希望 Suricata 具有内置(启用)调试:
sudo apt-get install suricata-dbg 

2.2、配置Suricata

> 首先要配置内部网络和外部网络参数,修改配置文件/etc/suricata/suricata.yaml
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"  # 内网是HOME_NET参数,设置为系统内网网段
EXTERNAL_NET: "!$HOME_NET"  # 指定外部网络
> 指定Suricata检查网络流量的网络接口(ip addr查看):
  
> 确保将default-rule-path属性设置为/etc/suricata/rules:
  
> 保存更改并关闭配置文件。然后重新启动Suricata以应用更改:
sudo systemctl restart suricata

2.3、更新Suricata规则集

默认情况下,Suricata附带一组有限的检测规则,位于/etc/suricata/rules/目录中。但是这些规则在检测威胁入侵方面能力较弱,可以更新业内知名的第三方规则集来提高检测效果。
  
Suricata提供了一个名为suricata-update的工具,它允许您从规则集提供者那里获取规则。有些是免费的,例如ET Open set,而有些则需要付费订阅。
它是一个用Python编写的工具,可以使用pip全局安装Suricata-Update供所有用户使用:pip3 install --upgrade suricata-update
   
要为您的服务器获取最新的规则集,请运行以下命令
$ sudo suricata-update update-sources  # 更新规则集索引
$ sudo suricata-update list-sources  列出默认的规则提供程序集
$ sudo suricata-update enable-source et/open  # 添加规则集et/open
$ sudo suricata-update -o /etc/suricata/rules
从输出中,您可以看到suricata-update获取免费的Emerging Threats ET Open Rules并将它们保存到 Suricata 的/etc/suricata/rules/suricata规则文件。此外,它表示处理的规则数。在此示例中,总共添加了45266个。其中,启用了35359个,删除了6个,修改了131个。
   

2.4、测试 Suricata 规则

在开始测试Suricata之前,建议先测试一下配置是否正常:
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v
  
这里将按照Suricata 的快速入门指南的建议,通过模拟入侵来测试ET Open规则集。
通过向作为NIDS( 网络入侵和检测系统)框架的 testmynids.org网站发送 HTTP 请求,将使用签名 ID 2100498 测试 IDS 功能。
   
2100498:
/etc/suricata/rules/ suricata.rules中存在2100498:
alert ip any any -> any any (msg : "GPL ATTACK_RESPONSE id check returned root" ; content : "uid=0|28|root|29|" ; classtype :bad -unknown ; sid : 2100498 ; rev : 7 ; metadata :created_at 2010_09_23 , updated_at 2010_09_23 ;)
这 将对任何在其有效负载中包含内容的 IP 流量发出警报。
   
$ curl http://testmynids.org/uid/index.html
应该得到以下输出:
发送的 HTTP请求旨在通过模仿id命令的输出来触发警报,该命令可能通过 shell 在受感染的远程系统上运行。
现在让我们筛选 Suricata 的日志以获取相应的警报。Suricata 附带两个默认启用的日志文件:
  • /fast.log
  • /var/log/suricata/eve.json
将使用grep 命令在/var/log/suricata/fast.log日志文件中检查与curl 请求相对应的日志条目。我们将使用快速入门文档中的2100498规则标识符搜索日志条目:
$ grep 2100948 /var/log/suricata/fast.log, 这样将获得以下表示入侵的输出:
或者,您可以检查/var/log/suricata/eve.log日志文件中的签名 ID 2100498,如图所示
$ jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

三、suricata-update规则管理 

参考   suricata-update规则管理 - 简书 (jianshu.com)
Suricata-Update是更新和管理Suricata规则的官方方式。
安装: pip3 install --upgrade suricata-update
  
更新规则
suricata-update命令将执行以下操作:
  • 查找suricata路径上的程序以确定其版本;
  • 查找/etc/suricata/enable.conf,/etc/suricata/disable.conf,/etc/suricata/drop.conf和/etc/suricata/modify.conf以查找要应用于下载规则的过滤器。这些文件是可选的,不需要存在。
  • 下载适用于您的Suricata版本的Emerging Threats Open规则集,如果找不到则默认为4.0.0。
  • 应用上面加载的启用,禁用,删除和修改过滤器。
  • 写出规则/etc/suricata/rules/suricata.rules。
  • 在测试模式下运行Suricata  /etc/suricata/rules/suricata.rules
   
suricata-update用法:
root@node1:/etc/suricata# suricata-update -h
usage: suricata-update update [-h] [-v] [-q] [-D <directory>] [-c <filename>]
                              [--suricata-conf <filename>] [--suricata <path>]
                              [--suricata-version <version>]
                              [--user-agent <user-agent>]
                              [--no-check-certificate] [-V] [-o <directory>]
                              [-f] [--yaml-fragment <filename>] [--url <url>]
                              [--local <path>] [--sid-msg-map <filename>]
                              [--sid-msg-map-2 <filename>]
                              [--disable-conf <filename>]
                              [--enable-conf <filename>]
                              [--modify-conf <filename>]
                              [--drop-conf <filename>] [--ignore <pattern>]
                              [--no-ignore] [--threshold-in <filename>]
                              [--threshold-out <filename>]
                              [--dump-sample-configs] [--etopen]
                              [--reload-command <command>] [--no-reload]
                              [-T <command>] [--no-test] [--no-merge]
                              [--offline] [--fail]
optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         更详细的输出
  -q, --quiet           安静地跑。仅显示警告和错误消息
  -D <directory>, --data-dir <directory>
                        设置备用数据目录 (default: /var/lib/suricata)
  -c <filename>, --config <filename>
                        suricata-update配置文件的路径 (default/etc/suricata/update.yaml)
  --suricata-conf <filename>
                        suricata配置文件的路径 (default/etc/suricata/suricata.yaml)
  --suricata <path>     Suricata程序的路径
  --suricata-version <version>
                        将Suricata版本设置为特定版本,而不是检查路径上的Suricata版本。
  --user-agent <user-agent>
                        为HTTP请求设置自定义用户代理字符串
  --no-check-certificate
                        Disable server SSL/TLS certificate verification
  -V, --version         显示suricata-update的版本
  -o <directory>, --output <directory>
                        要将规则输出到的目录
  -f, --force           强制远程规则文件下载(如果它们不是刚刚下载),或者远程校验和与缓存副本匹配
  --yaml-fragment <filename>
                        Output YAML fragment for rule inclusion
  --url <url>           从中下载规则的URL。此选项可以多次使用
  --local <path>        要包含的本地规则文件的文件名或目录的路径
  --sid-msg-map <filename>
                        Generate a sid-msg.map file
  --sid-msg-map-2 <filename>
                        Generate a v2 sid-msg.map file
  --disable-conf <filename>
                        Filename of rule disable filters
  --enable-conf <filename>
                        Filename of rule enable filters
  --modify-conf <filename>
                        Filename of rule modification filters
  --drop-conf <filename>
                        Filename of drop rule filters
  --ignore <pattern>    Filenames to ignore (can be specified multiple timesdefault: *deleted.rules)
  --no-ignore           Disables the ignore option.
  --threshold-in <filename>
                        Filename of rule thresholding configuration
  --threshold-out <filename>
                        Output of processed threshold configuration
  --dump-sample-configs
                        Dump sample config files to current directory
  --etopen              默认下载ET / Open规则集
  --reload-command <command>
                        Command to run after update if modified
  --no-reload           禁用Suricata规则重新加载
  -T <command>, --test-command <command>  指定自定义测试命令以在重新加载Suricata之前测试规则
  --no-test             禁用测试命令并继续进行,就像它已经通过一样
  --no-merge            不要将规则合并到单个规则文件中。警告:如果2个输入规则文件具有相同名称,则不会尝试解决冲突。
  --offline             Run offline using most recent cached rules
  --fail                Strictly fail and exit in case of an error
other commands:
    update-sources             Update the source index
    list-sources               List available sources
    enable-source              Enable a source from the index
    disable-source             Disable an enabled source
    remove-source              Remove an enabled or disabled source
    add-source                 Add a new source by URL
    check-versions             Check version of suricata-update

四、Suricata规则

suricata规则由三部分组成:
  • Action:规则匹配后所执行的操作;
  • Header:定义规则的协议、源和目的IP地址、端口和流量方向;
  • Options:选项,指定诸如签名ID(sid)、日志信息、匹配数据包内容的正则表达式、分类类型,以及其他可以帮助缩小识别合法和可疑流量的修饰语 。
一条自定义规则:
alert http any any <> $HOME_NET 80 (msg:"web服务器出现404状态码"; content: "404"; http_stat_code; sid:561001;)
Action取值范围如下:
  • pass:如果匹配到规则,suricate会停止扫描并放行数据包
  • drop:如果程序匹配到了这类规则,这个数据包被阻断将不会被发送到目标。Drop只能在IPS/inline模式下可用。缺点:接收器没有接收到正在发生事情的信息,导致超时(TCP),Suricata对这个数据包生成一个警报。
  • reject:不同于 Drop 直接丢弃数据包,reject 在匹配到规则时会主动进行拒绝数据包。有两种类型的拒绝数据包将自动选择。当违规数据包与TCP有关时,会发送Reset-Packet包。对其他所有协议,会发送ICMP-error包。Suricata同时会生成一个警告。在Inline/IPS模式下,违规数据包也会被drop掉,与Drop action相似。
  • alert:当匹配到规则时,Suricata 不会对数据包进行任何操作,会像对正常数据包一样进行放行,除了会记录一条只有管理员能够看到的警
以上四种操作也是有优先级的,默认的优先级为:Pass > Drop > Reject > Alert。也就是规则在匹配时会优先考虑包含 Pass 的规则,其次才是 Drop,再然后是 Reject,最后再考虑包含 Alert 的规则
  
Header包含如下几项内容
  • 协议(Protocol):这个字段用来告诉 Suricata当前规则所包含的协议。其取值可以为:tcp,udp,icmp,ip,http,ftp,tls(包含ssl),smb,dns等;这些协议能不能用取决于配置文件suricata.yaml中是否配置了这些协议
  • 源/目的地址(Source and destination):源/目的地址可以设置为 IP 地址或者在配置文件(Suricata.yaml)里定义的变量;
  • 端口号(Ports):不同的协议使用不同的端口号,例如 HTTP 使用 80 端口,而 HTTPS则使用 443。通常情况下端口号会设置为 any,这样会影响所有的协议;
  • 流向(Direction):流向告诉规则匹配哪些流量数据,是源ip到目标ip的单项流量,还是2个ip往返之间的流量。其中,每条规则都必须有一个箭头如示:->或<>。
Options包含一系列选项,选项以key:value或者key的形式存在,用;进行分隔<keyword>: <settings>; <keyword>;
常见的选项如下6. Suricata Rules — Suricata 6.0.3 documentation

五、添加自己的Suricata规则

6.13. HTTP关键字 — Suricata 7.0.0-dev 文档 (osgeo.cn)
suricata HTTP关键字 - 23云恋49枫 - 博客园 (cnblogs.com)
1、在/etc/suricata/rules/下创建my.rules文件
 
2、向my.rules中写入自己的规则
# 百度搜素
alert tcp any any -> any any (msg:"hit baidu.com..."; content:"baidu"; reference:url, www.baidu.com; sid:888888890;)
alert tcp any any -> any any (msg:"hit baidu.com"; content:"baidu"; sid:888888891;)
 
# 登录dvwa
alert http any any <> any any (msg:"dvwa url"; content:"/login.php";  http_uri; nocase; sid:8880; rev:1;)
alert http any any -> any any (msg:"dvwa protocol"; flow:to_server; http_protocol; content:"HTTP/1.1"; sid:8881; rev:1;)
alert http any any -> any any (msg:"dvwa request header";  content:"application/x-www-form-urlencoded"; http_header; sid:8882; rev:1;)
alert http any any -> any any (msg:"dvwa request referer"; http_referer;  content:"http://192.168.11.45/login.php"; sid:8883; rev:1;)
alert http any any -> any any (msg:"dvwa request user agent";  content:"Mozilla/5.0"; http_user_agent; nocase; sid:8884; rev:1;)
alert http any any -> any any (msg:"dvwa request cookie";  content:"security=impossible"; http_cookie; nocase; sid:8885; rev:1;)
alert http any any -> any any (msg:"dvwa request body";  content:"username=admin"; http_client_body; nocase; sid:8886; rev:1;)
alert http any any -> any any (msg:"dvwa request body"; file_data;  content:"username=admin"; content:"password=password"; nocase; sid:88861;  rev:1;)
alert http any any <> any any (msg:"dvwa"; content: "200"; http_stat_code; sid:8887; rev:1;)
alert http any any <> any any (msg:"dvwa"; content: "302"; http_stat_code; sid:8888; rev:1;)
alert http any any <> any any (msg:"dvwa code"; content:"impossible"; nocase; sid:8889; rev:1;)
# sqli-lab
alert http any any -> any any (msg:"SQL注入攻击"; content:"/Less-1"; http_uri; nocase; sid:562001; rev:1;)
alert http any any -> any any (msg:"SQL注入攻击-union."; content:"select"; http_uri; nocase; classtype:web-sql-injection; sid:562002; rev:1;)
alert http any any -> any any (msg:"SQL注入攻击---."; content:"--"; http_uri; nocase; classtype:web-sql-injection; sid:562003; rev:1;)
alert http any any -> any any (msg:"SQL注入攻击response."; content:"Your Login name"; http_server_body; nocase; classtype:web-sql-injection; sid:562004; rev:1;)
alert http any any -> any any (msg:"SQL注入攻击response_1."; http_server_body;  content:"Your Login name"; content:"Your Password"; nocase;  classtype:web-sql-injection; sid:562005; rev:1;)    # 语法解析error
alert http any any -> any any (msg:"SQL注入攻击response_2."; file_data; content:"Your Login name"; content:"Your Password"; nocase;  classtype:web-sql-injection; sid:562006; rev:1;)
3、更新Suricata配置文件/etc/suricata/suricata.yaml,确保你的本地规则文件已添加到规则列表:
4、如果您必须更正您的规则和/或修改Suricata的YAML配置文件,那么您必须重新启动Suricata。
systemctl restart suricata
 
5、运行suricata并查看是否正在加载规则。
suricata -c /etc/suricata/suricata.yaml -i ens160
比如错误的规则被检测出来了:
如果规则未能加载,Suricata将显示与它认为该规则不可加载时一样多的信息。特别注意细节:查找特殊字符、空格、大写字符等的错误。
6、虚拟机上网页访问baidu.com或者curl baidu.com 
7、笔记本上网页访问http://192.168.11.45/login.php,输入用户密码,登录
8、网页访问http://192.168.11.45:8080/Less-1/?id=-1' UNION SELECT 1,2,3 --+

六、参考

GitHub - OISF/suricata: Suricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community.

7.2. 添加您自己的规则 — Suricata 7.0.0-dev 文档 (osgeo.cn) 官方文档

   

Suricata – 入侵检测、预防和安全工具 - 知乎 (zhihu.com)

(2条消息) Suricata规则编写_投篮不准的程序员不是一个好车手的博客-CSDN博客

五.Suricata识别http攻击流量 - eveplw - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言快速实现图片布局(1)

&#xff08;1&#xff09;简单的一排或者对称的多排&#xff0c;使用patchwork即可。/表示分行&#xff0c;|表示分列 library(patchwork) pp1<-ggplot(mtcars) geom_point(aes(mpg, disp)) pp2<-ggplot(mtcars) geom_boxplot(aes(gear, disp, group gear)) pp3 <…

few shot object detection via feature reweight笔记

摘要部分 few shot很多用的都是faster R-CNN为基础&#xff0c;本文用的是one-stage 结构。 用了一个meta feature learner和reweighting模块。 和其他的few shot一样&#xff0c;先学习base数据集&#xff0c;再推广到novel数据集。 feature learner会从base数据集中提取meta…

Python机器学习实战-特征重要性分析方法(8):方差分析ANOVA(附源码和实现效果)

实现功能 使用f_classif()获得每个特征的方差分析f值。f值越高&#xff0c;表明特征与目标的相关性越强。 实现代码 from sklearn.feature_selection import f_classif import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as p…

七张图解锁Mybatis整体脉络,让你轻松拿捏面试官

前言 MyBatis是一款ORM&#xff08;Object-Relational Mapping&#xff09;框架&#xff0c;其主要用于将Java对象与关系数据库之间进行映射&#xff0c;凭借其轻量性、稳定性以及广泛的开源社区其受到了广大开发者的追捧。 那MyBatis为我们做了哪些事情呢&#xff1f;其实&a…

Thinking for Doing:让LLMs能推断他人心理状态来做出适当的行动。

LLMs通常能回答有关心理状态的问题&#xff0c;但往往不能将这些推断用于实际行动。例如&#xff0c;如果一个故事中的角色正在寻找他的背包&#xff0c;而模型知道背包在厨房里&#xff0c;那么模型应该能推断出最好的行动是建议角色去厨房查看。T4D 的目的就是要求模型不仅要…

JavaScript-mooc(纯分享)

第一步下载软件 mooc_v1.3.2_windows_amd64.zip - 蓝奏云 解压后打开有这么多文件 用记事本的打开方式打开config的文件 第一个尖头改成你学校对应慕课英华网址 第二个箭头是你的账号 第三个箭头是你的密码 改好后点击文件保存 最后一步点击运行 {"global": {&qu…

零代码编程:用ChatGPT一键自动制作英文绘本音频

读英文绘本&#xff0c;对于儿童的英语启蒙非常重要。在这个过程中&#xff0c;必然要父母给孩子读大量的英文绘本&#xff0c;这会非常累。有些英文绘本自带音频&#xff0c;直接播放即可&#xff0c;这就轻松多了。如果没有自带音频呢&#xff1f;这时候可以从YouTube下载绘本…

应用在智能家电中的触摸感应芯片

智能家电就是将微处理器、传感器技术、网络通信技术引入家电设备后形成的家电产品&#xff0c;具有自动感知住宅空间状态和家电自身状态、家电服务状态&#xff0c;能够自动控制及接收住宅用户在住宅内或远程的控制指令&#xff1b;同时&#xff0c;智能家电作为智能家居的组成…

Linux常见指令3

Linux常见指令3 一.Linux指令1.时间相关的指令1.date指定格式显示时间2.时间戳3.补充内容-日志3.Cal 2.find补充1.which2.whereis 3.uname-a-r 4.重要的几个热键5.关机命令 二.grep-i选项-n选项-v选项grep其他用途1.搜索指定进程信息2.查找日志等级 补充命令补充命令:sort补充命…

void * 类型指针

目录 一、什么是void *类型指针 二、void *类型指针作用 三、void *类型指针的用法 一、什么是void *类型指针 void *类型指针是无具体类型指针。不能直接进行解引用操作&#xff0c;也不能进行加减整数的操作。 二、void *类型指针作用 void *类型指针可以用于接收任意类型…

【2023集创赛】平头哥杯一等奖作品:基于无剑100开源SoC平台构建双核TEE安全系统

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;平头哥杯一等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼品…

超全整理,Jmeter接口性能测试-Beanshell调用jar包加密(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、添加beanshell…

Jmeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就不…

《软件方法(下)》第8章2023版连载(05)关于实体类

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.2 建模步骤C-1 识别类和属性 8.2.2 三种分析类 8.2.2.2 关于边界类 边界类的责任是接受输入、提供输出以及做简单的过滤。 图8-20中提到边界类的映射方法——每个有接口的外系统…

Linux TCP协议通信 (流程 三次握手 四次挥手 滑动窗口)

TCP通信流程 Socket函数 TCP通信实现&#xff08;服务器端&#xff09; #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int main() {//1.创建socketint lfd socket(AF_INET, SOCK_…

微软首款AI芯片代号“雅典娜”;马斯克四年内将让“星舰”上火星丨 RTE 开发者日报 Vol.61

开发者朋友们大家好&#xff1a; 这里是**「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻**」、「有态度的观点」、「有意思的数据」、「有思考的文章」…

关于对XSS原理分析与绕过总结

一、原理 该文章仅用于信息防御技术教学&#xff0c;请勿用于其他用途。 1、XSS原理 XSS&#xff08;跨站脚本攻击&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者通常会在网页中插入恶意的 JavaScript 代码。由于服务器对输入数据的过滤和验证不严格&#xff0c;这…

刘京城:我的《软件方法》学习经历(有彩蛋)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 写在前面&#xff08;潘加宇&#xff09; 下面是刘京城写的关于他学习《软件方法》的经历。我在前面啰嗦几句。 我做软件建模方面的研究和普及工作已经24年了&#xff0c;和各行各业…

机器学习-数值特征

离散值处理 import pandas as pd import numpy as npvg_df pd.read_csv(datasets/vgsales.csv, encoding "ISO-8859-1") vg_df[[Name, Platform, Year, Genre, Publisher]].iloc[1:7]NamePlatformYearGenrePublisher1Super Mario Bros.NES1985.0PlatformNintendo2…

30 数据分析常见概念(略写可跳)

文章目录 数据科学领域概述数据如何驱动运营给企业带来价值岗位关键词说明业务的商业模式 数据指标数据指标定义及常用数据指标如何选取指标分析角度计数流量导向的工具内容导向的工具用户导向的工具业务导向的工具 数据分析方法对比分析多维分析漏斗分析留存分析总结 用户画像…