如果我要在我的网站上留下一个SHA2系列哈希 - 它被认为安全多长时间?在我确定有人会发现碰撞并知道什么是哈希之前,我会有多长时间?
我知道时间量将取决于寻求打破它的人的计算能力.它还取决于字符串长度,但我很好奇哈希是多么安全.
由于我们中的许多人都在运行Web服务器,所以我们不得不为有人可能一直到存储用户哈希的数据库的那一天做好准备.那么,将服务器安全性移开,然后你有什么?
对于我与之交谈过的很多人来说,这是一个稍微理论化的领域,所以我希望能够获得更多有关破解平均期望的信息.
hash('sha256', 'mytext');
hash('sha256', 'thisismytext');
hash('sha256', 'xx$1sw@the4e');
hash('sha256', 'thisismyslightlylongertext');
db695168e73ae294e9c4ea90ff593e211aa1b5693f49303a426148433400d23f
b62c6ac579abf8a29e71d98aeba1447c66c69002cfd847b148584f886fd297ef
501f1b26abbc75594d06f0935c8bc502d7bcccf5015227bd6ac95041770acb24
3debc12761bbeb5b4460978ac2be5b104163de02ea799f0705399d0e5b706334
Run Code Online (Sandbox Code Playgroud) 我想知道所有这些是否完全相同或是否存在一些差异.
方法1:
CREATE TABLE testtable
(
id serial,
title character varying,
CONSTRAINT id PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
方法:2
CREATE TABLE testtable
(
id serial PRIMARY KEY,
title character varying,
);
Run Code Online (Sandbox Code Playgroud)
方法3:
CREATE TABLE testtable
(
id integer PRIMARY KEY,
title character varying,
);
CREATE SEQUENCE testtable_id_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER SEQUENCE testtable_id_seq OWNED BY testtable.id;
Run Code Online (Sandbox Code Playgroud)
更新:我在网上发现了一些内容,通过使用原始序列,您可以为主键预先分配内存,这有助于您计划在下一分钟进行数千次插入.
官方RFC文档声明我们可以在域的"本地"部分使用大写和小写字母(以及许多其他疯狂的东西).
然而,现实世界中常见的东西 - 以及规范所说的是两个不同的东西.! # $ % & ' * / = ? ^ { | } ~在来自大型提供商(如yahoo,google或hotmail)的电子邮件中,不允许使用这些额外字符().此外,非常非常罕见地看到包含大写字母的电子邮件(JohnDoe@example.com).
我今天给自己发了几封电子邮件,使用不同的大写和小写组合,发现我的电子邮件服务器都将它们视为同一帐户而忽略了字母大小写不同的事实.换句话说,JohnDoe@example.com = johndoe@example.com到我的电子邮件服务器(包括我的免费电子邮件帐户).
我应该按照世界选择的格式采取行动 - 并标准化/小写所有ANSII电子邮件吗?或者我应该允许用户注册多个帐户,如JohnDoe @ example.com,johndoe @ example.com和JOHNdoe@example.com?
CouchDB在允许将对象/行插入数据库之前提供验证.这确保了如果你有一个面向公众的沙发应用程序,你的数据库将不会被任何人填充垃圾.
User <-> CouchDB
Run Code Online (Sandbox Code Playgroud)
但是,我想弄清楚从标准的应用程序设计过程中看起来是什么样子,你有一个可信赖的中间层,可以完成大部分的auth工作.例如,大多数应用程序将Ruby或PHP放在数据库和用户代理之间,允许应用程序在允许将类似帖子的内容保存到数据库之前找出有关用户代理的信息.
User -> Ruby -> MySQL
User <- Ruby <- MySQL
Run Code Online (Sandbox Code Playgroud)
当用户不可信时,您如何信任用户执行管理任务?
例如,在使用couchDB插入用户行之前,如何进行"电子邮件验证"?您不能让用户代理插入行 - 因为它们会向系统填充垃圾邮件帐户.另一方面,没有中间层可以在单击电子邮件中的链接后插入行.
怎么样,我会假设你允许任何人通过在公共表格中创建新记录来输入他们的电子邮件email_verify.这是公共用户代理可以执行的操作,因为表不会在应用程序中执行任何操作 - 它只是一个存储槽.
然后node.js可以跟踪_changes提要并发送激活电子邮件,同时在私有表(如email_confirm)中创建新条目(node.js将用作可信中间层).如果用户单击该链接然后返回... [unknown] ...并且node.js最终可以在私有用户表(user)中创建记录.
此时,我们可以依赖couchdb验证来完成应用程序的其余部分,因为我们已经创建了已确认的用户帐户.
随着更多的背景让我们想象一下建立在couchdb上的讨论,任何人都可以注册.我们不希望任何人在没有某种验证的情况下直接提交内容 - 但用户代理都直接运行系统.(表将是Thread,Comment,及User).这怎么样?
在HTML中,有几个特殊字符< > & ' "对DOM解析器有重要意义.这些是流行函数的字符,例如PHP的htmlspecialchars转换为HTML实体,因此它们在解析时不会意外触发.
执行的翻译是:
- '&'(&符号)变成了
&"(双引号)"在未设置ENT_NOQUOTES时变为.'(单引号)'仅在设置了ENT_QUOTES 时才会出现.- '<'(小于)成为
<- '>'(大于)变为
>
但是,我记得在像IE6这样的旧浏览器中,还有其他字节序列导致浏览器的DOM解析器将内容解释为HTML.
今天这仍然是个问题吗?如果单独过滤这些5就足以防止XSS?
例如,以下是 HTML和JavaScript中的字符"<"的所有已知组合(UTF-8).
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
< …Run Code Online (Sandbox Code Playgroud) 当我创建一个SQLite内存数据库时 - 如何在完成后删除它?脚本结束并关闭连接时会自动释放吗?
$pdo = new PDO('sqlite::memory:');
Run Code Online (Sandbox Code Playgroud) 我不是指SMTP/IMAP客户端,我的意思是一个可以接收和发送电子邮件的工作SMTP服务器.
有很多部分PHP和Go SMTP服务器的例子只监听SMTP连接 - 是不是有任何显示如何发送邮件?
我真的很想学习简单邮件传输协议的后半部分.我知道有很多不良服务器与标准不同 - 但我想了解整个协议从开始到结束是如何实现的.
我对使用基数树(或Patricia trie)存储的哈希/字典/数组感兴趣strings -> values。但是,我发现我有太多的字符串无法容纳到内存中。
我发现Algolia撰写了一篇文章,介绍了他们如何通过搜索索引解决此问题,他们谈论了我正在尝试做的事情:在构建每个分支时将基数树刷新到磁盘上,并且仅读回所需的分支。
但是,他们没有提及他们如何做到这一点。我想到存储基数树的唯一方法是作为完整的(序列化的)对象或作为简单的键/值存储的哈希/数组。
例如,使用键/值存储
SET smile: [...values...]
SET smiled: [...values...]
SET smiles: [...values...]
SET smiling: [...values...]
Run Code Online (Sandbox Code Playgroud)
然后进行前缀扫描以提取出的键/值MATCH smil*。但是,这种损失失去了基数树的节省空间的好处,另外,它还需要在负载下重建至少一部分基数树。
已经创建了Object-Relational-Mappers来帮助应用程序(以对象的方式思考)以与其他类/对象类似的应用程序友好方式处理存储的数据.
但是,我从未见过NoSQL"Key/Value"存储系统的OKM(Object-Key/Value-Mapper).这看起来很奇怪,因为需要更多的东西,因为更多的价值关系必须硬编码到应用程序中而不是常规的单个SQL表行对象.
four requests:
user:id
user:id:name
user:id:email
user:id:created
vs one request:
user = [id => ..., name => ..., email => ...]
Run Code Online (Sandbox Code Playgroud)
此外,您必须跟踪"列表"(发布has_many评论),因为您没有通过表或外键使用has_many.
INSERT INTO user_groups (user_id, group_id) VALUES (23, 54)
vs
usergroups:user_id = {54,108,32,..}
groupsuser:group_id = {23,12,645,..}
Run Code Online (Sandbox Code Playgroud)
还有更多的逻辑示例,应用程序需要复制正常关系数据库使用的一些基本功能.所有这些原因使OKM的声音听起来像鞋子.
有吗?有什么理由没有吗?
我有一个master包含稳定代码的主分支.每次我想构建新的东西时get checkout -b 'development',添加新代码,然后将其合并回master并删除开发分支.
但是,在我添加新内容之前,这是否会创建一个更大的repo数据库而不仅仅是保持开发分支并将master合并到其中(所以开发是最新的)?所有这些临时开发分支是否在回购中占用了额外的空间?