问几个关于 Django 的弱智的问题,年末赶工,感觉自己💊

2017-12-20 22:46:47 +08:00
 CatCode
  1. django这个词怎么读?
  2. 目前是在用 Django 1.11 做事情,Python3.6,数据库是 MySQL,python 的数据库连接是 mysqlclient。请问在 Django 里有没有包含简单的防注入措施?
  3. 当用户访问某个页面,就要触发服务器上一个 shell 脚本,而且必须是 root 权限,但不需要等待脚本的执行结果。请问用哪种方法实现比较好?

最近赶工,作为一个非专业的,面对任务力不从心,请原谅我做了一回伸手党,感谢各位。

2978 次点击
所在节点    Python
14 条回复
eastpiger
2017-12-20 22:53:18 +08:00
1,个人一般习惯读作姜狗
2,直接用 Django 自带的 ORM 模块,日常大部分弱智注入漏洞足够了。
3,消息队列 定时任务 试试 Celery
leelee
2017-12-20 22:54:48 +08:00
姜狗
ivechan
2017-12-20 23:04:38 +08:00
有一个很出名的电影叫 <<被解救的姜戈>>
他就是 django
rogwan
2017-12-20 23:10:24 +08:00
django 全套官方组建,不要自己写裸表单,官方组件安全系数很高了,一般人根本攻不破的。
clino
2017-12-20 23:12:34 +08:00
3 建议触发一个 jenkins job
CatCode
2017-12-21 09:06:21 +08:00
@eastpiger @clino 请问能不能在 python 和 django 内实现?因为目标是轻量级,简单便于维护。
cominghome
2017-12-21 09:28:34 +08:00
@CatCode Celery 怕是逃不过去哦,直接把执行脚本的逻辑写在 view 里面的话容易出事
clino
2017-12-21 09:45:10 +08:00
@cominghome #7 写在 view 里也不太可能,因为用 root 跑,除非用 root 跑 web 才可能

跑一个 jenkins 其实非常简单,当然占的资源不会太少,如果要求资源少的话我觉得可以在 root 跑一个 rpc 的服务(可以用 python 写)供 web 端调用,这样也不太费事
roricon
2017-12-21 10:00:05 +08:00
1 和 2 有人解答了.

3. celery 可以做, 但还有个包 https://github.com/Koed00/django-q 感觉比 celery 上手简单点.
roricon
2017-12-21 10:03:09 +08:00
@clino 其实是可以 sudo 的, 只不过这么做实在是太不安全, 不推荐

https://stackoverflow.com/questions/13045593/using-sudo-with-python-script
yilai
2017-12-21 14:39:55 +08:00
1.有
2.Queue
yilai
2017-12-21 14:40:29 +08:00
0.粘钩....
xpresslink
2017-12-21 15:36:29 +08:00
1.2.两题都有人答了。
3. 说个轻量级的解决方案吧,只要你的 LINUX 稍有点基础就能做到。

比较也容易实现的方法是直接 subprocess.call('sudo /absolute/path/your.sh')
visudo 或 vi /etc/sudoers
django_user_name ALL= (root) NOPASSWD: /absolute/path/your.sh
%django_group ALL=(root) NOPASSWD
这个方式省事但有一定的安全隐患

另一个比较安全的方案是:
可以在由 django 在需执行脚本时创建一个标志文件。
然后由 root 用户创建一个定时任务,用脚本每分钟查询是不是有这个文件,有就执行脚本,删除标志文件。
# crontab -e
/1 * * * * /absolute/path/check.sh
TesterCC
2017-12-21 17:34:30 +08:00
1,2 前面已经回答的简明扼要了。
对于第 3 个问题,建议 LZ 你简单介绍下业务需求,根据业务需求来选择实现方式:
举个例子:仅仅是触发 sh,那你触发 jenkins api 去执行 sh 也可行,还安全省事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416399

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX