python - 使用请求安全处理潜在的恶意 URL
问题描述
我正在构建一个用于分析电子邮件的工具,以尝试确定它们是否是网络钓鱼,我想查看电子邮件中是否有任何链接重定向,以及它们是否重定向了多少次以及重定向到哪里。我目前正在使用请求库来处理所有这些内容,并且为了获取链接的历史记录,您必须调用 .get()。对潜在的恶意 URL 执行此操作是否安全,如果不是,是否有任何方法可以获取重定向信息而不会使我的计算机处于危险之中?
解决方案
你可以发送一个 HEAD 请求allow_redirects=True
:
>>> url = "http://stackoverflow.com/q/57298432/7954504"
>>> resp = requests.request(
... "HEAD",
... url,
... allow_redirects=True
... )
>>> resp.history
[<Response [301]>, <Response [302]>]
>>> [i.url for i in resp.history]
['http://stackoverflow.com/q/57298432/7954504', 'https://stackoverflow.com/q/57298432/7954504']
并不是说这是万灵药。其他需要考虑的事情是在 URL 本身上添加一些启发式方法,本着“当你看到一个看起来很糟糕的 URL”的精神。(我喜欢yarl
分析 URL。)例如:
- 文件扩展名是什么?
- URl 是否使用非标准端口?
- 域是 IPv4/6 地址还是 localhost?
- 是否有任何查询参数值本身是有效的 URL?
...等等。
推荐阅读
- python - 多类分类的去噪自编码器测试模式
- c++ - 是否有解决 C++ 中智能指针对指针运算的限制的解决方法?
- bash - MacOS bash:为什么即使在 eval 条件下使用 ERR 信号也会触发?
- java - Java 13 - 不能使用 `var` 关键字
- angular - Angular 自定义库 - 导出函数?
- xml - 无法解释 XML 中的所有特殊字符
- signals - 2 SIGINT 处理程序在一秒内收到第二个 SIGINT 后退出程序
- javascript - 使用 D3 缩放到外部加载的 svg 上的路径边界框
- bash - 在 curl 中显示进度条而不显示响应内容
- for-loop - Lua - 使用 for 循环创建嵌套表