一个安全、分散的平台,用于维护您的在线身份

spkcspider的Python项目详细描述


简单保护敲击(探访)卡蜘蛛(简称:spkcspider)

spkcspider提供一张数字名片,可用于身份验证、购物和支付。为此提供了多因素身份验证。 它只需提供一个链接到你的数据药水,就可以保证你在购物时在线数据的安全。这样,用户可以提供一些敲门机制(例如,必须提供一些代码,tan)来保护内容。

spkcspider的进一步特性和优点是:

  • 跨设备配置,而不在webshop/服务上保存用户数据。 这使得它们很容易与dsgvo兼容,无需调整
  • 如果移动,地址数据只能在一个地方更改。如果你经常搬家,这个特别有用 另外,如果您在旅行途中想买点东西。
  • 可以验证数据。
  • 隐私:私人服务器易于设置(仅要求:cgi),也与tor兼容
  • 旅行:有些人不尊重隐私的共同规则。这个工具可以让你的数字生活保持隐私。
    • 设备上没有此功能
    • 你可以用旅行模式隐藏你的数据(针对最坏的检查员)
      • 注意:痕迹可能仍然存在(如"最近使用的"功能、书签)
    • 对政府来说:用心理学而不是破门而入!唯一的受害者是守法的公民。

安装

此项目可以用作独立项目(克隆repo)或一组可重用应用程序(setup.py安装)。

构建要求

    NPM
  • pip>;=19(和诗歌)

诗歌(在虚拟环境中)

poetry install
# for installing with extras specify -E extra1 -E extra2

Pip

pip install .

设置

npm install --no-save
./manager.py migrate
./manager.py collectstatic
# or simply use
./tools/install_deps.sh

注意事项

允许域模式为空错误:

有些迁移失败,现在需要手动重新进行操作

连接到数据库并执行: 更改表spider_base_usercomponent drop column allow_domain_mode; alter table spider_base_assignedcontent drop column allow_domain_mode;

这在sqlite3中不起作用( 导出数据(如果指定,则删除允许域模式) 重新创建数据库文件 导入数据 请参阅:http://www.sqlitetutorial.net/sqlite-alter-table/" rel="nofollow">http://www.sqlitetutorial.net/sqlite alter table/为什么不想手动尝试

mysql使用一些特殊设置: 要求mysql使用utf8字符集 若要取消中断测试,请使用"字符集":"utf8":

DATABASES={'default':{'ENGINE':'django.db.backends.mysql',...'TEST':{'CHARSET':'utf8'}}}

如何将utf8字符集添加到mysql:

_旧崩溃对象创建:

将sqlite3降级到3.25或将django升级到至少2.1.5/2.0.10

导入数据:

迁移后更新动态 在导入数据(使用loaddata)之前,update dynamic将创建数据

从cgi切换时保留路径

location /cgi-bin/cgihandler.fcgi {
   rewrite /cgi-bin/cgihandler.fcgi/?(.*)$ https://new.spkcspider.net/$1 redirect ;
}

日志记录

在此模型中,令牌作为get参数进行传输。考虑禁用 记录GET参数(至少是合理的参数)或更好的参数: 禁止记录后续请求

仅限nginx筛选令牌(硬):

location / {
  set $filtered_request $request;
  if ($filtered_request ~ (.*)token=[^&]*(.*)) {
      set $filtered_request $1token=****$2;
  }
}
log_format filtered_combined '$remote_addr - $remote_user [$time_local] '
                    '"$filtered_request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

access_log /var/logs/nginx-access.log filtered_combined;

nginx filter get参数:

log_format filtered_combined '$remote_addr - $remote_user [$time_local] '
                    '"$uri" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

access_log /var/logs/nginx-access.log filtered_combined;

apache filter get参数:

LogFormat "%h %l %u %t \"%m %U %H\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

本地化

不要使用基于路径的本地化!这打破了整个模式。 路径对于验证应该是唯一的。curl请求中的本地化 可按标题存档。

外部使用

有用于控制spkcspider的特殊get参数:

  • page=<;int>;:页码
  • token=xy:token作为get参数,如果无效:则检索token作为get参数T.
  • token=prefer:使用无效的机制,更容易看到它的作用
  • raw=true:优化机器的输出,使用Turtle格式
  • raw=嵌入:嵌入组件的内容
  • id=id&id=id:限制内容id(仅限内容列表)
  • 搜索=foo&search=!notfoo:搜索不区分大小写的字符串
  • search=\u未列出:列出"未列出"的内容(如果所有者、特殊用户(不在公共列表中工作)。
  • 保护=假:如果需要保护,则失败
  • protection=xy&protection=yx…:要使用的保护
  • intention=auth:尝试使用用户组件身份验证登录(返回到登录重定向)
  • referer=<;url>;:激活referer模式
    • 意图=域:域验证引用模式
    • 意图=SL:无服务器推荐模式
    • payload=<;foo>;:传递成功的请求(包括post),例如sessionid
    • 意图=登录:referer使用spkcspider登录(注意:referer应该是用户登录的那个,请检查referer字段)
    • 意图=持久化:推荐人可以在Web服务器上持久化数据
  • embed_big=true:仅适用于staff和superuser:覆盖嵌入到图形中的文件的最大大小(仅适用于默认助手)

推荐人

  • 正常引用模式:向引用方发送令牌,客户端使用哈希验证是否已发送令牌。
  • 无服务器引用模式(SL):令牌作为GET参数传输,不进行POST请求(由于客户端看到令牌而客户端未通过身份验证,因此不太安全)
  • 域引用模式(域):引用域被添加到令牌。不适用于其他意图(但"活动"模式是活动的,因为不会创建筛选器),并且仅当域模式用于上下文活动(例如功能或访问上下文(内容))时才有效。可以自动化,不需要用户批准。用于标记更新(仅当功能请求域模式时才有效)。

特殊目的:

  • SL:激活无服务器模式
  • live:使用固定id过滤live

搜索参数

  • search还搜索usercomponents name和description字段
  • 只能与"列表"视图一起使用
  • 项目可以用否定!Fo
  • 严格的信息字段搜索可以使用 <李>!!福逃过一劫!foo项目
  • _ foo转义foo项
  • <李>!_否定严格的信息字段搜索
  • 未列出是一种特殊的搜索:它列出带有"未列出"标记的内容

verified_by url应返回哈希的最后验证日期

原始模式

即使在其他组件中,raw模式也可以跟随引用,因为它是只读的。 否则可能会危及安全。

重要功能

  • 持久性:允许推荐人保存数据(由持久性功能使用和激活)
  • webconfig:允许远程网站和服务器在您的服务器上保存配置数据(需要持久性)
  • tmpconfig:允许远程网站和服务器将配置数据保存在服务器上,并附加到临时令牌(表示:它们在一段时间后消失)

内部API

结构

蜘蛛:

对于蜘蛛和内容物

  • spkcspider.apps.spider:存储用户组件,公共库,警告:具有spider_base命名空间以不中断现有应用程序
  • spkcspider.apps.spider_帐户:适用于spider的用户实现。您可以提供自己的用户模型。
  • spkcspider.apps.spider_filets:文件和文本内容类型
  • spkcspider.apps.spider U密钥:公钥和锚
  • spkcspider.apps.spider_标记:已验证的信息标记
  • spkcspider.apps.spider_webcfg:webconfig功能
  • spkcspider:包含spkcspider url检测和wsgi处理程序

验证人:

验证器的基本参考实现。

spkcspider.apps.verifier:验证程序基实用程序警告:具有spider_verifier命名空间以不中断现有应用程序

信息字段语法

info字段是一个简单的键值存储。语法是(去掉空格):

标志语法:\ x1e key\x1e 键值语法:[x1e key=value\x1e

注意:我使用语义ascii分隔符x1e。为什么?使用不可打印字符进行拼写可以简化转义和清理。 注意2:我从使用\x1f而不是=返回,因为信息字段用于搜索

为什么不使用json字段?django还没有为每个db适配器提供统一的json字段。

表格

  • forms.initial:将用于RDF
  • field.initial:仅用于初始化

身份验证/权限

  • request.is_staff:请求用户使用人员权限访问视图(componentpublicIndex中不是这样的)
  • request.is_owner:请求用户拥有组件
  • request.is_special_user:请求用户拥有组件或is_职员
  • request.protections:int:已填充足够的保护,最大测量强度,list:失败的保护,false:无法访问;无法使用保护进行访问

特殊范围

  • 添加:使用assignedcontent表单创建内容
  • 更新:更新内容
  • 原始更新:更新内容,不指定内容表单,添加第二个原始更新模式(原始添加不存在,可以通过在添加范围中返回httpresponse来存档)
  • 导出:导出数据(尚未实现导入)
  • 查看:向不受信任的方呈现内容

强度(成分)

  • 0:没有保护。完整内容可见
  • 1-3:保护可提供的保护强度。元数据(名称、说明)可见,包含在站点地图中,公共组件
  • 4:仅限登录,用户密码。仍然包含元数据
  • 5:未设置公共属性。不再包含在站点地图或公共组件索引中
  • 6-8:保护+公共属性未设置
  • 9:仅限登录,未设置用户密码+公共属性
  • 10:索引,仅登录,特殊保护。登录时使用保护。这里的内容可以通过使用每个组件的唯一属性使每个用户都是唯一的

=标记上额外的["强度"](如果可用,否则视为零):

在创建点为其创建的用户组件的强度

强度(保护)

  • 0:无保护
  • 1-3:弱、中、强
  • 4:执行组件身份验证

=令牌上额外的["保护强度"](如果可用,否则视为零):

为创建令牌而传递的保护强度

注意:管理员创建的访问令牌的强度为0

从url/urlpart获取用户组件/内容以获取功能

使用usercomponent.from_url_part(url)/assignedcontent.from_url_part(url,[matchers])实现 或者使用域模式或持久令牌。 注意:域模式和持久令牌的区别在于,域模式令牌具有可变的生存期(特定于用户,但默认为7天)

API中断

  • < Buff行情>

    0.5:设置用新语法将*\tld_params_mapping重命名为*\u request_kwargs_map(允许主机,tld以开头)。

    • 注意:端口参数被删除,localhost匹配localhost:80,localhost:8000,…

待办事项

  • 示例
  • 文档
  • 测试管理员
  • 本地化
    • 协调穿孔

稍后

  • 可能:使配额类型可重写(可能添加额外的未保存配额:其他或使用0)
  • 创建用于导入的客户端脚本(推送到服务器,用于身份验证的索引令牌?)
    • 使用browerside javascript?
  • textfilet etherpad式同步
  • PW保护:为已更改的密钥添加迁移工具
  • L.log日志angs
  • 改进保护,添加保护

实现网络评论

  • 每个内部页面都可以添加注释(与作者保持联系)
    • 作为消息发送?
    • 评论框?
  • 注释:url,子条目列表,注释文本,反应列表(反应,计数器)
  • 视图:加载带有原始内容的iframe?
  • js用于加载子命令(仅1级),清理!
  • 您只看到朋友的评论
  • 通过消息传递实现?将保留私人评论
  • 稍后/可能:
    • 在网页上注册您的评论URL的方法,以便其他人可以看到所有评论
    • 社交媒体内容:通过评论和喜欢来查找内容
    • 其他页面注释

谢谢

  • 默认主题使用Dave Gandy的Font Awesome-http://fontawesome.io
  • 有些文本字段使用alexander demode的trumbowyg
  • Django团队的卓越产品

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
尝试连接到Red5服务器时出现java问题   java实现Runnable的类被认为是ExecutorServices的“Runnable任务”?   java struts2类中的多个@validation   java未能应用插件[class'org.gradle.api.plugins.scala.ScalaBasePlugin']:gradle v2。13   如何使用Java流仅收集长度最大的元素?   从spring引导应用程序连接到firestore的java引发空指针异常   java从SQLite插入和获取真实数据类型会为连续插入获取空值吗?   当存在未知数量的空格时,使用java替代正向查找   部署如何为当今的浏览器部署java小程序(小程序、嵌入、对象)?   @OneToMany和@ManyToOne@Formula之间的java双向关系返回null   java为什么在我的例子中,协议缓冲区的性能比JSON差?   如何部署混合C++/Java(JNI)应用程序?   java如何在程序中显示字符串的完整信息。反恐精英?   java在Hibernate中从持久性上下文中分离实体中的实体