Django管理员的自定义URL

wfveoks0  于 2022-12-20  发布在  Go
关注(0)|答案(4)|浏览(162)

为了安全起见,我想把django默认的admin url改成自定义的,比如把www.example.com改成mysite.com/admin/mysite.com/mysecretadmin/,这样admin就完全不能通过默认的url访问了。
我尝试了互联网上的一些解决方案,例如,我这样更改urls.py:

from django.conf.urls import patterns, url, include
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('api.views',
    ...,
    ...,
    url(r'^secret-admin-url/', include(admin.site.urls)),
)

很遗憾,没有一个对我有效。有人知道解决方法吗?我用的是django1.5.4。

vwkv1x7d

vwkv1x7d1#

请参阅www.example.com下面URL中的“将AdminSite示例挂接到URLconf”部分https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-to-urlconf

dzjeubhm

dzjeubhm2#

对于那些最近发现这个问题的人,基于Django 3.1文档:
注册默认的管理站点示例django.contrib.admin.site在URL**/admin/**:

# main project urls.py
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path("admin/", admin.site.urls),
]

你可以简单地改变admin/的网址到任何你想要的:

urlpatterns = [
    path("my_custom_url/", admin.site.urls),
]
oyjwcjzk

oyjwcjzk3#

如果你不想使用默认页面/admin,你可以给admin添加一个密钥。

urlpatterns = [
    path('admin_eTiOmEthelInEwathbace/', admin.site.urls,),
]

如果您的模板中有链接

<a href="{% url 'admin:index' %}">Admin</a>

则这将引用上面的具有url的站点:http://127.0.0.1:8000/admin_eTiOmEthelInEwathbace/
现在您不想发布这个secret_key,因此可以从环境变量中获取它,例如decouple,这样urls.py就变成了

from decouple import config
SECRET_ADMIN = config('SECRET_ADMIN')

urlpatterns = [
    path(f'admin_{SECRET_ADMIN}/', admin.site.urls,),
]
x3naxklr

x3naxklr4#

如果您想防止暴力或字典攻击和您的管理员登录页无法访问未经授权的用户,普通用户.请按照以下步骤:
首先安装django管理蜜罐和信号

pip install django-admin-honeypot(inastall in settings.py)
pip install django-honeypot-signals(inastall in settings.py)

覆盖此.txt文件(因为不推荐使用future标记):
模板/蜜罐_信号/通知.txt:

{% load i18n %}
{% blocktrans with site_name=site.name %}
{% endblocktrans %}

Invalid login attempt from your duplicate ADMIN panel..
• Review entry at http://{{ site.domain }}{% url "admin:admin_honeypot_loginattempt_change" object.id %} 

Username: {{ object.username }}
IP: {{ object.ip_address }}
Timestamp: {{ object.timestamp }}

django-admin-honeypot创建一个假管理员登录页面,如果有人试图访问你的假管理员登录页面,django honeypot会向管理员发送带有凭据的电子邮件。
如何访问主管理员登录页面?:

  • 第一个月
    您的主要urls.py:
from django.contrib import admin
from django.urls import path
from django.urls.conf import include
from . import settings
from decorator_include import decorator_include
from django.contrib.auth.decorators import login_required, user_passes_test
from django.core.exceptions import PermissionDenied
from django.core.mail.message import EmailMessage
from datetime import datetime
from django.views.generic.base import RedirectView

def only_user():
    def check(user):
        if user.is_authenticated and user.is_superuser or user.is_staff:
            return True
        
        time = datetime.now()
        message = f'----------------------------------\nName: {user.username}\nEmail: {user.email}\nTime: {time}.\n----------------------------------\n • {user.username} is not a staff user or admin.For some security reasons..Please block this user from your admin panel(Blacklist).'
        
        email = EmailMessage(
                            f'📛📛📛Alert!! {user.username} is try to accessing your admin panel!!', 
                            message,
                            settings.EMAIL_HOST_USER,
                            [settings.EMAIL_HOST_USER], 
                            )
        email.fail_silently = False
        email.send()
        
        raise PermissionDenied
    return user_passes_test(check)

urlpatterns = [  
                 
    path('', include('product.urls')),
    
    #This is all fake admin urls...
    path('admin/', include('admin_honeypot.urls', 
          namespace='admin_honeypot')),
    path('site/admin/',RedirectView.as_view(url='/admin')),
    path('user/admin/',RedirectView.as_view(url='/admin')),
    path('secure/admin/',RedirectView.as_view(url='/admin')),
    path('mysite/admin/',RedirectView.as_view(url='/admin')),
    path('admin/secure',RedirectView.as_view(url='/admin')),
    path('real/admin/',RedirectView.as_view(url='/admin')),
    
    #This is real admin login page url
    path('custom_url/', 
         decorator_include([login_required, only_user()], 
         admin.site.urls)),

]

对于这种方式,你不能直接访问您的管理员登录页面..首先你需要登录您的网站,然后访问您的管理面板..

如何保护网站的登录页面免受攻击者攻击?:

- Use django defender (https://django-defender.readthedocs.io/en/latest/)
 ---------------------OR-------------------------
 - Use google hidden(ReCaptchaV2Invisible) recaptcha field 
 (https://pypi.org/project/django-recaptcha/)

如果检测到任何未授权用户的恶意行为,您可以使用这个django包来阻止他们的IP地址或用户名:

pip install django-blacklist

阅读文档:django-黑名单
·对不起我的英语

相关问题