javascript - 如何使用 python 捕获 URL 中的 javascript 代码注入(inject)?

标签 javascript python html url xss

如何检测格式错误的 URL 或注入(inject)了 javascript 的 URL

'http://example.com/portal/image/user_male_portrait?img_id=755109&t=1372243875358"><script>setTimeout(function () {document.body.innerHTML = \'<img src="http://images.example.com:9191/public/rickroll.gif" style="display: block; width: 100%">\'; }, 100);</script><!--'

'http://example.com/portal/image/user_male_portrait?img_id=566203&t=1350313911834'

第一个 URL 是恶意的,而第二个 URL 则不是。我希望能够标记第一个。我可以使用正则表达式来匹配我想的脚本标签,但这就是用 Python 实现的方法吗?

最佳答案

做一个正则表达式来知道一个 URL 是否是脚本注入(inject)的尝试是非常困难的。为了匹配您给出的示例,搜索 <script就足够了。

但是一个<script>标签并不是 HTML 中唯一危险的东西:例如考虑 URL http://example.com/portal/image/user_male_portrait?img_id=755109&t=1372243875358" onclick="setTimeout(function () { document.body.innerHTML = '<img src="http://images.example.com:9191/public/rickroll.gif" style="display: block; width: 100%">'; }, 100);" 。没有<script>完全没有标签。

<小时/>

总而言之,在正则表达式中唯一真正能做的就是拒绝任何匹配的 URL

(?i)^(?!\s*https?://)|[<>"']

即拒绝任何有 <>"' 的 URL裸露;并拒绝所有以正则表达式 https?:// 以外的任何内容开头的 URL (毕竟,即使有了之前的检查,我仍然可以做到

javascript:alert(Object.keys({gotcha:42}))
<小时/>

但是,如果这是一种输入清理的情况,那么请注意,人们也可以始终对 < 进行百分比编码, > , "'任何 URL 中都不会损坏,所以也许:

url.replace('<', '%3C').replace('>', '%3E')\
   .replace('"', '%22').replace("'", '%27')

是更明智的做法(同时检查 scheme 确实是 "http:""https:" )。或者使用urllib.parse.urlparse将 URL 拆分为多个组件,然后对其进行解码和重新编码,最后使用 urllib.parse.urlunparse再次将其变成 URL。

关于javascript - 如何使用 python 捕获 URL 中的 javascript 代码注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767896/

相关文章:

javascript - 如何为菜单栏添加悬停效果以更改滚动状态?

python - 将生成器中的项目附加到 Python 列表时出现奇怪的外观

python - tweepy 计数限制为 200?

html - 如何实现布局目标 - 两栏

html - 使用 html 或/和 css 将按钮直接放置在彼此下方

javascript - angular2 路由器导出登录后无法工作

javascript - 使用另一个 div 类将相同的类添加到 div

python - 属性错误: 'Image' object has no attribute 'new' occurs when trying to use Pytorchs AlexNet Lighting preprocessing

CSS div 重叠,其下方无法识别鼠标事件

javascript - 汇总 - 导入外部库