Tag: 安全

Securly存储OpenID标识符和OAuth令牌

我正在创build一个Web应用程序,使用OpenIDlogin和OAuth令牌与Youtube。 我目前在数据库中以纯文本格式存储OpenID身份和OAuth令牌/令牌密钥。 将这些值存储为纯文本是不恰当的吗? 我可以使用OpenID标识符的单向encryption,但我不知道这是否是必要的。 对于OAuth令牌,我需要使用双向encryption,因为我的应用程序依赖于获取会话令牌的某些用途。 是否有必要encryptionOpenID的身份? 有人可以使用它来访问用户的帐户吗?

jQuery .text()方法是否安全?

我有来自用户的非转义数据。 那么这样使用是否安全: var data = '<test>a&f"#</test>'; // example data from ajax response if (typeof(data) === 'string') $('body').text(data); 我可以这样使用,还是有一些问题,如编码或一些特定的符号,我应该小心,并添加更严格的validation?

防止会话劫持

如何防止多个客户端使用相同的会话ID? 我问这是因为我想添加一个额外的安全层来防止会话劫持在我的网站上。 如果黑客以某种方式计算出另一个用户的会话ID,并使用该SID发出请求,如何检测到在服务器上共享单个SID的不同客户端,然后拒绝劫持尝试? 编辑 我经过仔细考虑,已经接受了Gumbo的回答,因为我已经意识到由于无状态HTTP协议的限制,我所要求的是不可能的。 我忘了HTTP也许是最基本的原则,现在我想这个问题似乎有些微不足道。 让我详细说明我的意思: 用户A在example.com上login后,为了简单起见,他给了一些随机的会话ID,让它成为'abc123'。 此会话ID在客户端以cookie的forms存储,并通过服务器端会话进行validation,以确保login的用户在从一个网页移动到另一个网页时保持login状态。 如果HTTP不是无状态的,那么这个cookie当然不需要存在。 因此,如果用户B窃取用户A的SID,并在他的计算机上创build一个值为“abc123”的cookie,他将成功劫持用户A的会话,但服务器根本无法合法识别用户B请求与用户A的请求有任何不同,因此服务器没有理由拒绝任何请求。 即使我们要列出在服务器上已经激活的会话,并尝试查看是否有人正在访问已经处于活动状态的会话,我们如何确定是另一个非法访问会话的用户而不是同一个用户谁已经login了一个会话ID,但只是试图做出另一个请求(即导航到不同的网页)。 我们不能。 检查用户代理? 可以欺骗 – 但作为深度防御措施仍然是好的。 IP地址? 可以根据正当的理由进行更改,但是我build议不要检查IP地址,而应该检查IP的前两个八位字节,即使数据规划networking中的用户因为完全合法的原因而经常有不断变化的IP通常只有IP的最后两个八位字节发生变化。 总而言之,无状态HTTP谴责我们永远无法完全保护我们的网站免遭会话劫持,但良好的做法(如Gumbo提供的)将足以防止绝大多数的会话攻击。 试图通过拒绝同一个SID的多个请求来保护会话免受劫持是简单的可笑的,并且会破坏会话的整个目的。

包含令牌参数的https URL:它有多安全?

在我们的网站上,我们向用户提供基于其私人信息(通过表格给出)的模拟。 我们希望稍后让他们恢复模拟结果,但不要强制他们创buildlogin名/密码帐户。 我们曾想过给他们发送一封带有链接的电子邮件,从中可以得到他们的结果。 但是,自然,我们必须保护这个URL,因为私人数据处于危险之中。 所以我们打算在URL中传递一个令牌(比如40个字母和数字的组合,或者一个MD5哈希),并使用SSL。 最后,他们会收到这样的电子邮件: 嗨, 通过https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn获取结果 你怎么看待这件事? 它足够安全吗? 你会怎么build议我为代币生成? 在https请求中传递URL参数怎么样?

如何在Android中encryption和解密文件?

我想encryption文件并将其存储在SD卡中。 我想解密该encryption的文件,并将其存储在SD卡中。 我试图encryption文件,打开文件stream和encryption是,但它不工作。 我想知道如何做到这一点。

在openssl_encrypt中使用初始化向量

我看了一下这个问题,想自己做。 当我跑这个代码(直接从这个答案 ): $textToEncrypt = "My super secret information."; $encryptionMethod = "AES-256-CBC"; // AES is used by the US gov't to encrypt top secret documents. $secretHash = "25c6c7ff35b9979b151f2136cd13b0ff"; //To encrypt $encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash, '1234567812345678'); //To Decrypt $decryptedMessage = openssl_decrypt($encryptedMessage, $encryptionMethod, $secretHash); //Result echo "Encrypted: $encryptedMessage <br>Decrypted: $decryptedMessage"; 但是我得到警告 openssl_encrypt(): Using an empty Initialization […]

我应该知道哪些常见的Web漏洞?

在networking编程方面,我仍然非常绿色,大部分时间都花在客户端应用程序上。 所以我很好奇在我的网站上应该担心/testing的常见漏洞。

服务器端处理JWT令牌的最佳实践

(从这个线程产生,因为这是一个真正的问题,而不是特定于NodeJS等) 我正在使用身份validation来实现REST API服务器,并且我已经成功实现了JWT令牌处理,以便用户可以通过带有用户名/密码的/ login端点进行login,然后从服务器密钥生成JWT令牌并返回给客户。 然后令牌在每个经过validation的API请求中从客户端传递到服务器,服务器密钥用于validation令牌。 但是,我正在试图了解确切地说明如何以及在多大程度上validation令牌的最佳实践,以build立真正安全的系统。 究竟应该参与“validation”令牌? 使用服务器密钥validation签名是否足够,还是应该交叉检查服务器中存储的某些数据的令牌和/或令牌载荷? 基于令牌的authentication系统只会像每个请求中传递用户名/密码一样安全,只要获取令牌的难度要高于获取用户的密码。 但是,在我看到的例子中,生成令牌所需的唯一信息是用户名和服务器端的秘密。 这是否意味着假设一个恶意用户获得了有关服务器机密的知识,他现在可以代表任何用户生成令牌,从而不仅可以访问给定用户,而且密码是获得,但实际上所有的用户帐户? 这带来了我的问题: 1)JWT令牌validation是否应限于validation令牌本身的签名,仅依赖服务器秘密的完整性,还是附带单独的validation机制? 在某些情况下,我已经看到了令牌和服务器会话的组合使用,在通过/ login端点成功login后,会话被build立。 API请求validation令牌,并将令牌中发现的解码数据与会话中存储的一些数据进行比较。 但是,使用会话意味着使用cookie,从某种意义上讲,它违背了使用基于令牌的方法的目的。 这也可能会导致某些客户的问题。 可以想象,服务器将所有令牌当前正在使用的内存caching或类似内容保留下来,以确保即使服务器秘密受到攻击,攻击者可以生成“有效”令牌,但只能通过/ login端点生成的确切令牌会被接受。 这是合理的还是多余的/矫枉过正的? 2)如果JWT签名validation是validation令牌的唯一手段,意味着服务器秘密的完整性是突破点,那么应该如何pipe理服务器机密? 从环境variables中读取并在每个已部署的堆栈上创build(随机化?)一次? 重新定制或定期轮换(如果是的话,如何处理在循环之前创build的现有有效令牌,但需要在循环后进行validation,如果服务器在任何给定的时间保持当前秘密和先前的秘密, ? 别的东西? 当涉及到服务器机密被泄密的风险时,也许我只是过于偏执狂,这当然是一个更加普遍的问题,需要在所有密码的情况下解决。

保护属性文件中的密码

我有一个连接到数据库的Java应用程序。 数据库的用户名和密码存储在属性文件中。 避免将属性文件中的密码以明文forms存储,同时仍然保留允许用户更改密码的选项的常用做法是什么? 这里的主要动机是防止有人在pipe理员编辑属性文件时查看pipe理员的肩膀并看到密码。 我在这里读到,有一个build立在C#中的方式。 了解Java,我不期望find一个内置的解决scheme,但我想听听别人在做什么。 如果我没有find任何好的select,那么我可能会用一个常量密码进行encryption,这个密码将保存在代码中。 但我讨厌这样做,因为感觉不对。 编辑2012年12月12日看起来像没有魔法,我必须将密码存储在代码或类似的东西。 最后,我们实现了一个与Jasypt非常相似的东西,就是其中一个答案中提到的Jasypt。 所以我接受了Jasypt的答案,因为它是最接近确切答案的东西。

如何保护REST API调用?

我正在开发在后端使用一些stream行的web框架的restful web应用程序,比如(rails,sinatra,flask,express.js)。 理想情况下,我想用Backbone.js开发客户端。 我如何只让我的JavaScript客户端与这些API调用进行交互? 我不希望这些API调用是公开的,并通过curl调用,或者只是通过在浏览器中input链接。