diff --git a/dnslog/settings.py b/dnslog/settings.py index 583e6bd..370162a 100644 --- a/dnslog/settings.py +++ b/dnslog/settings.py @@ -1,6 +1,7 @@ # coding:utf-8 import os +from django.utils.translation import gettext_lazy as _ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -27,6 +28,7 @@ INSTALLED_APPS = ( MIDDLEWARE = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', @@ -68,12 +70,17 @@ DATABASES = { # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True +LANGUAGES = ( + ('zh-hans', _('中文')), + ('en-us', _('English')), +) +LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) STATIC_URL = '/static/' if DEBUG: diff --git a/dnslog/urls.py b/dnslog/urls.py index 3b7287f..f51e9ed 100644 --- a/dnslog/urls.py +++ b/dnslog/urls.py @@ -1,6 +1,6 @@ # coding=utf-8 -from django.urls import path, re_path +from django.urls import path, re_path, include from django.contrib import admin from logview import views @@ -23,5 +23,6 @@ urlpatterns = [ re_path(r'^rebind/gen$', views.rebind_gen, name='rebind_gen'), re_path(r'^as_admin/$', views.as_admin, name='as_admin'), re_path(r'^config/update$', views.config_update, name='config_update'), + path('i18n/', include('django.conf.urls.i18n')), re_path(r'^.*$', views.index, name='index'), ] diff --git a/locale/en_us/LC_MESSAGES/django.mo b/locale/en_us/LC_MESSAGES/django.mo new file mode 100644 index 0000000..96df35f Binary files /dev/null and b/locale/en_us/LC_MESSAGES/django.mo differ diff --git a/locale/en_us/LC_MESSAGES/django.po b/locale/en_us/LC_MESSAGES/django.po new file mode 100644 index 0000000..957e622 --- /dev/null +++ b/locale/en_us/LC_MESSAGES/django.po @@ -0,0 +1,340 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-09 23:51+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: .\dnslog\settings.py:79 +msgid "中文" +msgstr "" + +#: .\dnslog\settings.py:80 +msgid "English" +msgstr "" + +#: .\logview\views.py:87 .\templates\login.html:64 +msgid "登录" +msgstr "Log In" + +#: .\logview\views.py:104 +msgid "登录失败次数太多,锁定10分钟" +msgstr "Too many login failures, account locked" + +#: .\logview\views.py:116 +msgid "用户名或密码错误" +msgstr "Username or password wrong" + +#: .\logview\views.py:128 +msgid "随机账号功能已关闭" +msgstr "Random login disabled by admin" + +#: .\logview\views.py:132 +msgid "爬虫禁止登录" +msgstr "Bots login not allowed" + +#: .\logview\views.py:136 +msgid "随机账号超限,请注册登录" +msgstr "Random account login exceeded, please register" + +#: .\logview\views.py:146 +msgid "随机账号创建失败" +msgstr "Fail to generate random account" + +#: .\logview\views.py:152 +msgid "注册功能已关闭" +msgstr "Register disabled by admin" + +#: .\logview\views.py:156 +msgid "注册" +msgstr "Register" + +#: .\logview\views.py:163 +msgid "无法创建该账号,已被占用" +msgstr "Username Token, please choose another one" + +#: .\logview\views.py:168 +msgid "用户名只能包含字母或数字" +msgstr "Username must be alpha-numberic" + +#: .\logview\views.py:179 +msgid "注册成功,请登录以确保密码有效" +msgstr "Register succeded, please log in" + +#: .\logview\views.py:222 .\logview\views.py:253 +msgid "删除成功" +msgstr "Delete Success" + +#: .\logview\views.py:228 .\logview\views.py:259 +msgid "删除失败" +msgstr "Delete Failed" + +#: .\logview\views.py:307 +msgid "DNSLog管理" +msgstr "DNSLog" + +#: .\logview\views.py:340 +msgid "WebLog管理" +msgstr "WebLog" + +#: .\logview\views.py:363 +msgid "API配置" +msgstr "API" + +#: .\logview\views.py:368 +msgid "DNS重绑定" +msgstr "DNS Rebind" + +#: .\logview\views.py:375 +msgid "Payloads大全" +msgstr "Payloads" + +#: .\templates\auto_reload.html:3 +msgid "监视刷新" +msgstr "Auto Refresh" + +#: .\templates\auto_reload.html:6 +msgid "自动刷新" +msgstr "Auto Refresh" + +#: .\templates\auto_reload.html:6 +msgid "" +"监视频率为20秒,一旦发现新域名,本页面将自动刷新。如果希望监视特定关键词,请" +"在搜索结果页开启" +msgstr "" +"Auto reload webpage once new records found, you can also check this box on a " +"search result page to monitor any keywords you like" + +#: .\templates\login.html:51 +msgid "用户名即域名前缀,越短,越有利于绕过限制" +msgstr "Username will become your domain name prefix" + +#: .\templates\login.html:53 .\templates\login.html:61 +msgid "用户名" +msgstr "Username" + +#: .\templates\login.html:54 +msgid "邮箱" +msgstr "Email" + +#: .\templates\login.html:55 .\templates\login.html:62 +msgid "密码" +msgstr "Password" + +#: .\templates\login.html:56 +msgid "再次输入密码" +msgstr "Confirm password" + +#: .\templates\login.html:58 +msgid "创建用户" +msgstr "Register" + +#: .\templates\login.html:59 +msgid "已有账号?登录" +msgstr "Already have an account, login" + +#: .\templates\login.html:66 +msgid "注册新账号" +msgstr "Register new account" + +#: .\templates\login.html:68 +msgid "创建随机ID并登录" +msgstr "Login as random new user" + +#: .\templates\login.html:73 +msgid "" +"基于bugscan dnslog开发" +msgstr "" +"Based on bugscan dnslog" + +#: .\templates\login.html:82 .\templates\views.html:373 +msgid "提示" +msgstr "TIPS" + +#: .\templates\login.html:88 +msgid "随机账号创建后,无法再次登录,其数据可能被定期清理" +msgstr "" +"Generated random users can not login and access logs after session ends" + +#: .\templates\login.html:89 +msgid "如果你希望长期保存日志,可注册个人账号" +msgstr "You can register an account to save and view logs" + +#: .\templates\login.html:93 +msgid "确认创建" +msgstr "Sure, create random user for me" + +#: .\templates\pager.html:34 +#, python-format +msgid "第%(page)s页 / 共%(numpages)s页, 共%(total)s条记录" +msgstr "Page %(page)s / %(numpages)s , %(total)s records in total" + +#: .\templates\pager.html:36 +msgid "删除所有记录" +msgstr "Delete All Records" + +#: .\templates\views.html:49 +msgid "退出" +msgstr "Logout" + +#: .\templates\views.html:57 .\templates\views.html:69 +msgid "域名" +msgstr "Domain" + +#: .\templates\views.html:58 .\templates\views.html:105 +msgid "搜索" +msgstr "Search" + +#: .\templates\views.html:59 .\templates\views.html:154 +msgid "子域名" +msgstr "Sub name" + +#: .\templates\views.html:72 .\templates\views.html:116 +msgid "位置" +msgstr "Location" + +#: .\templates\views.html:73 .\templates\views.html:117 +msgid "时间" +msgstr "Time" + +#: .\templates\views.html:74 .\templates\views.html:118 +msgid "操作" +msgstr "Operate" + +#: .\templates\views.html:87 .\templates\views.html:131 +#: .\templates\views.html:384 +msgid "删除" +msgstr "Delete" + +#: .\templates\views.html:130 .\templates\views.html:401 +msgid "查看" +msgstr "Details" + +#: .\templates\views.html:157 +msgid "开启用户注册功能" +msgstr "Enable register" + +#: .\templates\views.html:158 +msgid "开启产生随机账号" +msgstr "Enable generate random new user" + +#: .\templates\views.html:167 +msgid "单个请求命中查询" +msgstr "Single Query Check" + +#: .\templates\views.html:174 +msgid "设置为" +msgstr " " + +#: .\templates\views.html:174 +msgid "或者" +msgstr "or" + +#: .\templates\views.html:175 .\templates\views.html:194 +msgid "三级域名前缀" +msgstr "sub name prefix" + +#: .\templates\views.html:177 +msgid "检查是否触发" +msgstr "To check wheather a query was recieved, for example " + +#: .\templates\views.html:177 +msgid "访问" +msgstr "visit" + +#: .\templates\views.html:179 .\templates\views.html:180 +#: .\templates\views.html:205 .\templates\views.html:206 +msgid "返回" +msgstr "Return" + +#: .\templates\views.html:179 +msgid "请求被触发" +msgstr "Query recieved" + +#: .\templates\views.html:180 +msgid "请求未触发" +msgstr "Query never recieved" + +#: .\templates\views.html:187 +msgid "多个请求命中查询" +msgstr "Multiple Queries Check" + +#: .\templates\views.html:196 +msgid "" +"对于一个较大的Payload集合,首先批量投递payload,再通过单个请求,来检查哪些" +"payload触发执行成功。" +msgstr "" +"After your scanner sends large number of requests includes variaties of sub " +"names. You can check weather any dns queries were captured with only one API " +"request" + +#: .\templates\views.html:198 .\templates\views.html:199 +#: .\templates\views.html:200 +msgid "扫描器投递" +msgstr "Test" + +#: .\templates\views.html:198 .\templates\views.html:199 +#: .\templates\views.html:200 +msgid "使用域名" +msgstr "send requests with domain" + +#: .\templates\views.html:203 +msgid "检查是否存在漏洞,访问" +msgstr "To check wheather any queries were captured, visit" + +#: .\templates\views.html:205 +msgid "漏洞未触发" +msgstr "not vulnerable" + +#: .\templates\views.html:206 +msgid ",漏洞被触发,data字段包含成功触发的payload清单,至多返回50个" +msgstr "vulnerable, subs in data were queried by target" + +#: .\templates\views.html:221 .\templates\views.html:229 +msgid "生成域名" +msgstr "Generate Domain" + +#: .\templates\views.html:227 +msgid "合法IP" +msgstr "Valid IP" + +#: .\templates\views.html:228 +msgid "非法IP" +msgstr "Invalid IP" + +#: .\templates\views.html:234 +msgid "DNS监控" +msgstr "Monitor DNS Query" + +#: .\templates\views.html:235 +msgid "HTTP监控" +msgstr "Monitor HTTP Request" + +#: .\templates\views.html:379 +#, python-format +msgid " 是否清空全部 %(total)s 条记录?删除后数据无法恢复' " +msgstr "" +"This will delete all %(total)s records, data can not be recovered, " +"continue?" + +#: .\templates\views.html:382 +msgid "关闭" +msgstr "Close" + +#: .\templates\views.html:398 +msgid "收起" +msgstr "Collapse" diff --git a/logview/views.py b/logview/views.py index 7f87b4d..939b192 100644 --- a/logview/views.py +++ b/logview/views.py @@ -19,6 +19,7 @@ from django.contrib.auth.models import User as SysUser from django.contrib.auth import authenticate, login from django.conf import settings from django.contrib.auth import logout +from django.utils.translation import gettext as _ def get_city_by_ip(ip): @@ -83,7 +84,7 @@ def do_login(request): if userid: return HttpResponseRedirect('/dns/') - context = {'title': '登录', 'enable_register': 'yes', 'enable_create_random_user': 'yes'} + context = {'title': _('登录'), 'enable_register': 'yes', 'enable_create_random_user': 'yes'} c = Config.objects.filter(name='enable_register') if c and 'no' == c[0].value: context['enable_register'] = 'no' @@ -100,7 +101,7 @@ def do_login(request): if user.try_login_counter > 10 and (timezone.now() - user.last_try_login_time).seconds < 600: user.try_login_counter += 1 user.save() - context['error_msg'] = '登录失败次数太多,锁定10分钟' + context['error_msg'] = _('登录失败次数太多,锁定10分钟') return render(request, 'login.html', context) if user.password == hashlib.md5((password + username[:3] + '@dnslog').encode('utf-8')).hexdigest(): request.session['userid'] = user.id @@ -112,7 +113,7 @@ def do_login(request): else: user.try_login_counter += 1 user.save() - context['error_msg'] = '用户名或密码错误' + context['error_msg'] = _('用户名或密码错误') return render(request, 'login.html', context) if User.objects.count() < 1: @@ -124,15 +125,15 @@ def do_login(request): def random_id_login(request): c = Config.objects.filter(name='enable_create_random_user') if c and 'no' == c[0].value: - return redirect('/login?msg=随机账号功能已关闭') + return redirect('/login?msg=' + _('随机账号功能已关闭')) user_agent = request.META.get('HTTP_USER_AGENT').lower() if user_agent.find('bot') > 0 or user_agent.find('spider') > 0: - return redirect('/login?msg=爬虫禁止登录') + return redirect('/login?msg=' + _('爬虫禁止登录')) user_ip = request.META.get('HTTP_X_REAL_IP') or request.META.get('REMOTE_ADDR') if User.objects.filter(login_ip=user_ip).count() > 20: - return redirect('/login?msg=随机账号超限,请注册登录') + return redirect('/login?msg=' + _('随机账号超限,请注册登录')) for _ in range(30): username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8)) if not User.objects.filter(username=username): @@ -142,29 +143,29 @@ def random_id_login(request): request.session['userid'] = user.id request.session['username'] = username return redirect('/dns/') - return redirect('/login?msg=随机账号创建失败') + return redirect('/login?msg=' + _('随机账号创建失败')) def register(request): c = Config.objects.filter(name='enable_register') if c and 'no' == c[0].value: - return redirect('/login?msg=注册功能已关闭') + return redirect('/login?msg=' + _('注册功能已关闭')) username = request.POST.get('username', '')[:100] password = request.POST.get('password', '')[:100] email = request.POST.get('email', '')[:100] - context = {'title': '注册', 'reg': 'true', 'error_msg': '', + context = {'title': _('注册'), 'reg': 'true', 'error_msg': '', 'username': username, 'password': password, 'email': email} if User.objects.count() < 1: context['init'] = 'true' if request.method == 'POST': if User.objects.filter(username=username): - context['error_msg'] = '无法创建该账号,已被占用' + context['error_msg'] = _('无法创建该账号,已被占用') return render(request, 'login.html', context) else: m = re.match('[a-zA-Z0-9]+', username) if not m or len(m.group()) != len(username): - context['error_msg'] = '用户名只能包含字母或数字' + context['error_msg'] = _('用户名只能包含字母或数字') return render(request, 'login.html', context) password = hashlib.md5((password + username[:3] + '@dnslog').encode('utf-8')).hexdigest() token = hashlib.md5((password + username[:3] + '@token').encode('utf-8')).hexdigest()[:8] @@ -175,7 +176,7 @@ def register(request): SysUser.objects.create_user(username=username, email=email, password=password, is_staff=1, is_superuser=1) user.save() - return redirect('/login?msg=注册成功,请登录以确保密码有效') + return redirect('/login?msg=' + _('注册成功,请登录以确保密码有效')) return render(request, 'login.html', context) @@ -218,13 +219,13 @@ def dns_delete(request): if obj: if user.username != 'demo': obj.delete() - return redirect(url+'&suc=删除成功') + return redirect(url+'&suc=' + _('删除成功')) else: if request.GET.get("domain"): url += "&domain=" + request.GET.get("domain") if request.GET.get("ip"): url += "&ip=" + request.GET.get("ip") - return redirect(url+"&fail=删除失败") + return redirect(url+"&fail=" + _("删除失败")) def web_delete(request): @@ -249,13 +250,13 @@ def web_delete(request): if obj: if user.username != 'demo': obj.delete() - return redirect(url+'&suc=删除成功') + return redirect(url+'&suc=' + _('删除成功')) else: if request.GET.get("domain"): url += "&domain=" + request.GET.get("domain") if request.GET.get("ip"): url += "&ip=" + request.GET.get("ip") - return redirect(url+"&fail=删除失败") + return redirect(url+"&fail=" + _("删除失败")) def web_view(request): @@ -303,7 +304,7 @@ def log_view(request, type): return HttpResponse('noChange') else: return HttpResponse('Changed') - context['title'] = 'DNSLog管理' + context['title'] = _('DNSLog管理') context['page'] = page context['logs'] = logs context['numpages'] = paginator.num_pages @@ -336,7 +337,7 @@ def log_view(request, type): return HttpResponse('noChange') else: return HttpResponse('Changed') - context['title'] = 'WebLog管理' + context['title'] = _('WebLog管理') context['page'] = page context['logs'] = logs context['numpages'] = paginator.num_pages @@ -359,19 +360,19 @@ def log_view(request, type): c = Config.objects.filter(name=c_name) if c and 'no' == c[0].value: context[c_name] = 'no' - context['title'] = 'API配置' + context['title'] = _('API配置') context['last_id'] = context['total'] = context['page'] = 0 context['query_prefix'] = '' context['host'] = request.scheme + '://' + request.get_host() elif type == 'rebind': - context['title'] = 'DNS重绑定' + context['title'] = _('DNS重绑定') context['last_id'] = 0 context['total'] = 0 context['page'] = 0 context['query_prefix'] = '' context['host'] = request.scheme + '://' + request.get_host() elif type == 'payloads': - context['title'] = 'Payloads大全' + context['title'] = _('Payloads大全') else: return HttpResponseRedirect('/') context['userdomain'] = user.user_domain + '.' + settings.DNS_DOMAIN diff --git a/static/signin.css b/static/signin.css index 5c707f8..ced0113 100644 --- a/static/signin.css +++ b/static/signin.css @@ -6,6 +6,7 @@ body { body { display: -ms-flexbox; display: flex; + flex-direction: column; -ms-flex-align: center; align-items: center; padding-top: 40px; diff --git a/templates/auto_reload.html b/templates/auto_reload.html index 07b3294..b2fe91a 100644 --- a/templates/auto_reload.html +++ b/templates/auto_reload.html @@ -1,6 +1,7 @@ +{% load i18n %}
- +
- +
\ No newline at end of file diff --git a/templates/login.html b/templates/login.html index 05a310a..c97fbed 100644 --- a/templates/login.html +++ b/templates/login.html @@ -1,4 +1,5 @@ {% load static %} +{% load i18n %} @@ -13,34 +14,64 @@ +
+ {% csrf_token %} + + + {{ LANGUAGE_CODE }} + +
+ @@ -48,21 +79,22 @@ + @@ -74,6 +106,14 @@ } $('#confirmModal').modal(); } + $('.form-check-input').change(function (e){ + if (e.target.id === 'lang_zh'){ + $("[name='language']").val('zh-hans'); + } else { + $("[name='language']").val('en'); + } + $("[name='langForm']").submit(); + }) diff --git a/templates/pager.html b/templates/pager.html index d567702..481c39a 100644 --- a/templates/pager.html +++ b/templates/pager.html @@ -1,3 +1,4 @@ +{% load i18n %} \ No newline at end of file diff --git a/templates/views.html b/templates/views.html index 442c847..47b858d 100644 --- a/templates/views.html +++ b/templates/views.html @@ -1,4 +1,5 @@ {% load static %} +{% load i18n %} @@ -45,7 +46,7 @@ {{ username }} - 退出 + {% translate '退出' %} {% if fail %}
{{ fail }}
{% endif %} @@ -53,9 +54,9 @@ {% if type == 'dns'%}
- - - 子域名: {{userdomain}} + + + {% translate '子域名' %}: {{userdomain}}
{% include 'auto_reload.html' %}
@@ -65,12 +66,12 @@ ID - 域名 + {% translate '域名' %} Type IP - 位置 - 时间 - 操作 + {% translate '位置' %} + {% translate '时间' %} + {% translate '操作' %} @@ -83,7 +84,7 @@ {% if log.city %} {{ log.city }} {% else %}   {% endif %} {{ log.created_time|date:'Y-m-d H:i:s' }} - 删除 + {% translate '删除' %} {% endfor %} @@ -101,7 +102,7 @@ - + {% include 'auto_reload.html' %} @@ -112,9 +113,9 @@ ID URL IP - 位置 - 时间 - 操作 + {% translate '位置' %} + {% translate '时间' %} + {% translate '操作' %} @@ -126,8 +127,8 @@ {% if log.city %} {{ log.city }} {% else %}   {% endif %} {{ log.created_time|date:'Y-m-d H:i:s' }} - 查看 - 删除 + {% translate '查看' %} + {% translate '删除' %} @@ -150,11 +151,11 @@

- 子域名: {{userdomain}} + {% translate '子域名' %}: {{userdomain}} Token: {{token}} {% if is_admin %} - 开启用户注册功能 - 开启产生随机账号 + {% translate '开启用户注册功能' %} + {% translate '开启产生随机账号' %} {% endif %}

@@ -163,46 +164,46 @@
- 单个请求命中查询 + {% translate '单个请求命中查询' %}

{{host}}/api/{type}/{{username}}/{prefix}/?token={{ token }}

    -
  • type: 设置为 dns 或者 web
  • -
  • prefix: 三级域名前缀
  • +
  • type: {% translate '设置为' %} dns {% translate '或者' %} web
  • +
  • prefix: {% translate '三级域名前缀' %}
-

检查是否触发 test.{{userdomain}},访问:{{host}}/api/dns/{{username}}/test/?token={{ token }}

+

{% translate '检查是否触发' %} test.{{userdomain}},{% translate '访问' %}:{{host}}/api/dns/{{username}}/test/?token={{ token }}

    -
  • 返回 True,请求被触发
  • -
  • 返回 False,请求未触发
  • +
  • {% translate '返回' %} True,{% translate '请求被触发' %}
  • +
  • {% translate '返回' %} False,{% translate '请求未触发' %}
- 多个请求命中查询 + {% translate '多个请求命中查询' %}

{{host}}/api/group/dns/{{username}}/{prefix}/?token={{ token }}

    -
  • prefix: 三级域名前缀
  • +
  • prefix: {% translate '三级域名前缀' %}
-

对于一个较大的Payload集合,首先批量投递payload,再通过单个请求,来检查哪些payload触发执行成功。

+

{% translate '对于一个较大的Payload集合,首先批量投递payload,再通过单个请求,来检查哪些payload触发执行成功。' %}

    -
  • 扫描器投递 payload1,使用域名:payload1.xxx-rce.{{userdomain}}
  • -
  • 扫描器投递 payload2,使用域名:payload2.xxx-rce.{{userdomain}}
  • -
  • 扫描器投递 payload3,使用域名:payload3.xxx-rce.{{userdomain}}
  • +
  • {% translate '扫描器投递' %} payload1,{% translate '使用域名' %}:payload1.xxx-rce.{{userdomain}}
  • +
  • {% translate '扫描器投递' %} payload2,{% translate '使用域名' %}:payload2.xxx-rce.{{userdomain}}
  • +
  • {% translate '扫描器投递' %} payload3,{% translate '使用域名' %}:payload3.xxx-rce.{{userdomain}}
  • ...
-

检查是否存在漏洞,访问:{{host}}/api/group/dns/{{username}}/xxx-rce/?token={{ token }}

+

{% translate '检查是否存在漏洞,访问' %}:{{host}}/api/group/dns/{{username}}/xxx-rce/?token={{ token }}

    -
  • 返回 False,漏洞未触发
  • -
  • 返回 {"success": "true", "data": ["payload3", "payload2", "payload1"]},漏洞被触发,data字段包含成功触发的payload清单,至多返回50个
  • +
  • {% translate '返回' %} False,{% translate '漏洞未触发' %}
  • +
  • {% translate '返回' %} {"success": "true", "data": ["payload3", "payload2", "payload1"]}{% translate ',漏洞被触发,data字段包含成功触发的payload清单,至多返回50个' %}
@@ -217,21 +218,21 @@
- 生成域名 + {% translate '生成域名' %}

- - - + + +
- +

@@ -369,18 +370,18 @@ @@ -394,10 +395,10 @@ function show_web_headers(id) { if ( $('#web_headers_' + id)[0].className == 'd-none'){ $('#web_headers_' + id).removeClass('d-none'); - $('#showButton_' + id).text('收起'); + $('#showButton_' + id).text('{% translate '收起' %}'); } else { $('#web_headers_' + id).addClass('d-none'); - $('#showButton_' + id).text('查看'); + $('#showButton_' + id).text('{% translate '查看' %}'); } } /* var getUrlParameter = function getUrlParameter(sParam) {