python web 部分
WSGI
什么是 WSGI? 为什么需要它?
- Python Web Server Gateway Interface(web 服务器网关接口)
- 解决 Python Web Server 乱象 mod_python, CGI, FastCGI 等
- 描述了 Web Server (Gunicorn/uWSGI)如何与 web 框架(Flask/Django)交互,Web 框架如何处理请求
举个很常见的例子
def application(environ, start_response)
- application 就是 WSGI app,一个可调用对象
- 参数:
- environ:一个包含 WSGI 环境信息的字典,由 WSGI 服务器提供,常见的 key 有 PATH_INFO, QUERY_STRING 等
- start_response:生成 WSGI 响应的回调函数,接受两个参数,status 和 headers
- 函数返回响应体的迭代器
一个简单的兼容 WSGI 的 web 应用
# 导入 python 内置的 WSGI server
from wsgiref.simple_server import make_server
def application(environ, start_response):
print(environ) # 建议打出来这个字典看看有哪些参数
status = '200 OK'
headers = [('Content-Type', 'text/html; charset=utf8')]
start_response(status, headers)
return [b"<h1>Hello, World!</h1>"]
if __name__ == '__main__':
httpd = make_server('127.0.0.1', 8000, application)
httpd.serve_forever()
运行结果如下:
常用的 Python Web 框架对比
Django VS Flask Vs Tornado
- Django:大而全,内置 ORM、Admin 等组件,第三方插件较多
- Flask:微框架,插件机制,比较灵活(如 cookiecutter-flask 插件,可以生成统一的项目模版)
- Tornado:异步支持的微框架和异步网络库
什么是 MVC
MVC:模型(Model),视图(View),控制器(Controller)
- Model:负责业务对象和数据库的交互(ORM)
- View:负责与用户的交互展示
- Controller:接收请求参数调用模型和视图完成请求
如图:
什么是 ORM
Object Relational Mapping,对象关系映射
- 用于实现业务对象与数据表中的字段映射
- 代码更加面向对象,代码量更少,灵活性高,提升开发效率
web 安全问题
常见的web 安全问题,原理和防范措施,安全意识
- SQL 注入
- XSS(跨站脚本攻击,Cross-Site Scripting)
- CSRF(跨站请求伪造,Cross-Site Request Forgery)
什么是 SQL 注入
- 通过构造特殊的输入参数传入 Web 应用,导致后端执行了恶意 SQL
- 通常由于程序员未对输入进行过滤,直接动态拼接 SQL 产生
- 可以使用 开源工具 sqlmap,SQLninja 检测
如何防范 SQL 注入
web 安全一大原则:永远不要相信用户的任何输入
- 对输入参数做好检查(类型和范围);过滤和转义字符
- 不要直接拼接 sql,使用 ORM 可以大大降低 sql 注入风险
- 数据库层:做好权限管理配置;不要明文存储敏感信息
什么是 XSS
XSS(Cross Site Scripting),跨站脚本攻击
- 恶意用户将代码植入到提供给其他用户使用的页面中,未经转义的恶意代码输出到其他用户的浏览器被执行
- 用户浏览页面的时候嵌入页面中的脚本(js)会被执行,攻击用户
- 主要分为两类:反射性(非持久型),存储性(持久型)
什么是 CSRF
CSRF(跨站请求伪造,Cross-Site Request Forgery)
网友评论