5 个版本 (重大更新)
0.5.0 | 2024年4月27日 |
---|---|
0.4.0 | 2022年10月15日 |
0.3.0 | 2022年7月31日 |
0.2.0 | 2022年6月9日 |
0.1.0 | 2022年6月6日 |
#453 在 解析实现
79KB
1.5K SLoC
蒂维尔斯塔 - 为黑名单维护者提供不同的白名单机制
蒂维尔斯塔旨在为黑名单维护者提供一种不同且我们认为更好的白名单机制。
目录
安装
您可以通过 crates.io 安装 tivilsta 命令行界面或库。
$ cargo install tivilsta
$ tivilsta -V ## Assuming that it is in your ${PATH}
格式
简介
在一个黑名单和白名单列表越来越大的世界中,我们仍然使用的白名单机制仍然是相同的:列出所有白名单域名并使用某种类型的 shell 魔法来处理白名单。
如果我们想更多呢?这就是蒂维尔斯塔试图提供的:更好的编写白名单列表的方法。
使用蒂维尔斯塔,您仍然每行一个域名,但您还可以获得一些很棒的功能,例如正则表达式(regex)。实际上,蒂维尔斯塔项目有一组与您所知的相同的 "纯" 规则,但也有一组像 ALL
、REG
或 RDZ
这样的标志,以满足列表维护者在白名单过程中可能需要的许多可能的用例。
标志
蒂维尔斯塔提供了一套标志,使白名单维护变得更加容易。
无标志:最纯粹的规则
这是所有规则中最纯粹的。这是我们大家都知道并珍视的。没有任何标志的单行。
example.org
在这个例子中,任何与您的源文件主题直接匹配 example.org
的主题将被白名单。
ALL
:以 "ends-with" 为规则的规则
有时在处理高度动态的数据集时,您可能希望将所有以例如 gov.uk
结尾的主题白名单。
使用Tivilsta,您可以通过 ALL
标志来实现这一点。
ALL .gov.uk
在这个例子中,任何以 .gov.uk
结尾(包括 gov.uk
)的源文件主题都将被列入白名单。
REG
:正则表达式规则
您是正则表达式的粉丝吗?我们也是!当处理高度动态的数据集时,我们希望简单地使用正则表达式(简写正则表达式)来完成这项任务。
使用Tivilsta,您可以通过 REG
标志来实现这一点。
REG ^(?!.*\.?(watchdog\.ohio|dap\.digitalgov|stats\.ssa|adgallery\.whitehousedrugpolicy)).*\.gov$
在这个例子中,任何以 .gov
结尾的源文件主题将被列入白名单,但以下除外
watchdog.ohio.gov
dap.digitalgov.gov
stats.ssa.gov
adgallery.whiteshousedrugpolicy.gov
RZD
:广泛且强大的规则
您是否想过是否有某种方法可以将公司名称与所有可能的顶级域名组合列入白名单?
使用Tivilsta,您可以通过 RDZ
标志来实现这一点。此标志非常广泛且强大,因为它将获取 IANA根区域数据库 和 公共后缀列表 来构建包含所有可能的gTLD或扩展名的规则集 - 如果您愿意的话。
RZD example
在这个例子中,任何匹配 example.[gTLD]
的主题将被列入白名单。
使用 & 示例
库
use tivilsta::Ruler;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let my_subjects: Vec<String> = vec![
String::from("example.com"),
String::from("example.org"),
String::from("api.example.org"),
String::from("test.example.com"),
];
let whitelisting_rules: Vec<String> = vec![
String::from("api.example.org"),
String::from("ALL .com"),
];
let mut ruler = Ruler::new(false);
ruler.parse_vec(&whitelisting_rules);
for subject in my_subjects {
if ruler.is_whitelisted(&subject) {
println!("{} is WHITELISTED", subject)
} else {
println!("{} is still BLOCKLISTED", subject)
}
}
Ok(())
}
输出
example.com is WHITELISTED
example.org is still BLOCKLISTED
api.example.org is WHITELISTED
test.example.com is WHITELISTED
命令行界面
概述
具有多个值或文件的参数示例
tivilsta-s test.list-w whitelist1.list-w whitelist2.list
tivilsta-s test.list--reg reg1.list--reg reg2.list
参数 | 必需 | 允许多个值 | 描述 |
---|---|---|---|
--source | -s |
✅ | ❌ | 源文件。换句话说,要处理的黑名单。 |
--whitelist | -w |
✅ | ✅ | 白名单模式文件。每一行都将被处理 如它所是。 |
--all |
❌ | ✅ | 白名单模式文件。每一行都将使用 ALL 标志作为前缀。 |
--allow-complements |
❌ | ❌ | 在白名单时是否应考虑补数。当给定 example.org 时,补数为 www.example.org ,反之亦然。 |
--help | -h |
❌ | ❌ | 打印帮助信息并退出。 |
--output | -o |
❌ | ❌ | 输出文件。默认情况下,该工具将输出到 stdout 。您可以使用此参数显式设置输出文件。 |
--reg |
❌ | ✅ | 白名单模式文件。每一行都将使用 REG 标志作为前缀。 |
--rzd |
❌ | ✅ | 白名单模式文件。每一行都将使用 RDZ 标志作为前缀。 |
--version | -V |
❌ | ❌ | 打印版本信息并退出。 |
帮助输出
A different whitelisting mechanism for blocklist maintainers.
USAGE:
tivilsta [OPTIONS] --source <SOURCE> --whitelist <WHITELIST>...
OPTIONS:
--all <ALL>... One or multiple space separated whitelisting schema in form of
a file path or URL to read. Each rule/line will be
automatically prefixed with the `ALL ` flag while parsing.
Note: When using a URL, the file will be downloaded and stored
in a temporary file that will be deleted when the program
exits
--allow-complements Whether we consider complements while parsing rules. Note:
Complements are `www.example.org` if `example.org` is given -
and vice-versa
-h, --help Print help information
-o, --output <OUTPUT> The output file
--reg <REG>... One or multiple space separated whitelisting schema in form of
a file path or URL to read. Each rule/line will be
automatically prefixed with the `REG ` flag while parsing.
Note: When using a URL, the file will be downloaded and stored
in a temporary file that will be deleted when the program
exits
--rzd <RZD>... One or multiple space separated whitelisting schema in form of
a file path or URL to read. Each rule/line will be
automatically prefixed with the `RZD ` flag while parsing.
Note: When using a URL, the file will be downloaded and stored
in a temporary file that will be deleted when the program
exits
-s, --source <SOURCE> The file to cleanup
-V, --version Print version information
-w, --whitelist <WHITELIST>... One or multiple space separated whitelisting schema in form of
a file path or URL. Each rule/line will be parsed as-it-is.
Note: When using a URL, the file will be downloaded and stored
in a temporary file that will be deleted when the program
exits
简单的白名单示例
$ cat test.list
example.org
example.com
api.example.org
test.example.com
$ cat whitelist.list
api.example.org
ALL .com
$ tivilsta -s test.list -w whitelist.list
example.org
许可证
Copyright (c) 2022, 2023, 2024 Nissar Chababy
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://apache.ac.cn/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
依赖项
~10–24MB
~383K SLoC