① Web前端密码加密是否有意义
密码在前端加密完全没有意义,对密码系统的安全性不会有任何提高,反而会引发不必要的麻烦。
(1)加密了也无法解决重放的问题,你发给服务器端的虽然是加密后的数据,但是黑客拦截之后,把加密之后的数据重发一遍,依然是验证通过的。直接监听到你所谓的密文,然后用脚本发起一个http请求就可以登录上去了。
http在网络上是明文传输的,代理和网关都能够看到所有的数据,在同一局域网内也可以被嗅探到,你可以开个wireshark抓下局域网的包试试看。加密也没有提高什么攻击难度,因为攻击者就没必要去解密原始密码,能登录上去就表示目标已经实现了,所以,难度没有提高。
(2)既然是加密,那么加密用的密钥和算法肯定是保存在前端的,攻击者通过查看源码就能得到算法和密钥。除非你是通过做浏览器插件,将算法和密钥封装在插件中,然后加密的时候明文混淆上时间戳,这样即使黑客拦截到了请求数据,进行重放过程时,也会很快失效。
② Web前端密码加密是否有意义
密码在前端加密完全没有意义,对密码系统的安全性不会有任何提高,反而会引发不必要的麻烦。首先,做前端开发的人需要知道,前端系统的控制权是完全在用户手里的,也就是说,前端做什么事情,用户有完全的控制权。假设如同 @陈轩所说,前端做过了md5,后台就不用做了,这个做法会有什么后果?如果某一天,这个系统的数据库泄露了,黑客就直接拿到了每个用户的密码md5值,但此时,由于黑客知道密码是在前端进行哈希的,所以他不需要爆破出该md5对应的原文是什么,而是直接修改客户端向服务器发出的请求,把密码字段换成数据库中MD5就可以了,由于与数据库中记录一致,直接就会登录成功。这跟直接存储明文密码没有任何区别!!!所以不管前端是不是加密了密码,后台使用安全的哈希算法对内容再次转换是非常有必要的。(MD5可不行,要用bcrypt,我之前回答过一个类似的:随着显卡性能的高速发展,目前的快速Hash算法是否已经变得不够安全了?)这个回答还有一个人赞同,希望大家别被错误答案误导了。另外一个答案 @林鸿所说,在非安全HTTP连接上,可以防止原始密码被窃听。但问题在于由于你的登录系统接受的哈希过的密码,而不是原文,窃听者根本不需要原始密码,只要通过哈希结果就可以伪造请求登录系统。这样做只能防止被窃听到原文的密码被攻击者用在社会学攻击上,而不能改善该网站的安全性。所以不管前端是不是加密了密码,使用HTTPS安全连接进行登录都是非常有必要的。以上我说的两点,合起来看就是:不管前端是否加密了密码,都不能以此为假设,让后端设计的安全等级下降,否则就会有严重的安全问题。实际上,前端进行密码加密,可以看做帮助用户多进行了一次原文的转换,不管用了什么加密算法,算出来的结果都是密码原文,你该如何保护用户的原始密码,就该如何保护此处的加密结果,因为对你的登录系统来说,它们都是密码原文。以上这些,说明了密码加密是没有什么意义的,接下来,我要说明前端加密会带来什么问题。有些人会认为前端进行了加密,可以降低后台的安全性需求,这种错误的观念会造成系统的安全漏洞。实际上,你不能对前端做任何的假设,所有跟安全相关的技术,都必须应用在后台上。前端进行加密会造成页面需要js脚本才能运行,那么假设你的系统需要兼容不能运行js的客户端,就必须再设计一个使用原文的登录接口。由于前端是不是加密,所有安全机制都必须照常应用,所以为系统增加这样的复杂性是完全没必要的,即使传输明文密码,只要正确使用了HTTPS连接和服务器端安全的哈希算法,密码系统都可以是很安全的。
③ Web前端密码加密是否有意义
在前端对密码做一次MD5,看起来是防止明文传输了,事实上只有一种情况下它可以提高用户的安全性,那就是用户在别的网站上也用和你的网站一样的密码。并且在任何情况下都提高不了你自己网站的安全性。前面说的传输过程、内存里、日志里……这些地方没有明文密码,其实都只能保护用户本身的利益,对于自身服务的安全性是没有提高的。因为,既然传输过程不是加密的,那么包随便发,至于发一个abc123,还是发一个,对你的程序没有任何的区别,这时候你的程序都是小绵羊。这个过程可以看做,你的用户都用了32位字符串的密码,如是而已。从事实意义上讲,在所有网站上用同样密码的用户非常多,所以可以勉勉强强的说,这是有一丁丁点的意义的。但即使在前端做了签名,因为hash暴露了,也还是很容易被撞库。但是,对安全性没有提高,就不做了吗?当然要做,因为要应付审计。
④ 记录一下前端使用CryptoJS的几种加密方式
自己太小白了,之前在PC端项目中使用的MD5加密,现在的小程序项目使用了 CryptoJS 里面的 enc-base64 和 hmac-sha1 ,之前没有用到过这两种,所以比较疑惑,为何在小程序不继续使用 MD5 呢?所以在这里记录一下自己解疑惑的一些知识点。
随着互联网的兴起,我们对信息的安全越来越受重视,这样就导致在web开发中,对用户密码等各种加密变得更加重要了。与服务器的交互中,为了确保数据传输的安全性,避免被黑客抓包篡改。
对于Base64编码的,我觉得看一篇文章能够解决你的疑惑,我在这里就不赘述了
🧐 Base64编码原理
如: 用户密码,请求参数,文件加密
如: 接口参数签名验证服务
支付数据、CA数字证书
前端的朋友可能会关注前端js加密,我们在做 WEB 的登录功能时一般是通过 Form 提交或 Ajax 方式提交到服务器进行验证的。为了防止抓包,登录密码肯定要先进行一次加密(RSA),再提交到服务器进行验证。一些大公司都在使用,比如淘宝、京东、新浪 等。
前端加密也有很多现成的js库,如:
JS-RSA: 用于执行OpenSSL RSA加密、解密和密钥生成的Javascript库, https://github.com/travist/jsencrypt
MD5: 单向散列加密md5 js库, https://github.com/blueimp/JavaScript-MD5
crypto-js: 对称加密AES js库, https://github.com/brix/crypto-js
-CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。
HMAC 系列是消息验证,用于验证一个消息是否被篡改——如网站上传递 email 和 hmac(email),则接收时可以通过 hmac(email) 获知 email 是否是用户伪造的
⑤ 如何对web.config进行加密和解密
你好,可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码、数据库连接字符串和加密密钥)。对配置信息进行加密后,即使攻击者获取了对配置文件的访问,也可以使攻击者难以获取对敏感信息的访问,从而改进应用程序的安全性。 针对asp.net 2.0的应用程序的数据库链接字符串进行加密:例如,未加密的配置文件中可能包含一个指定用于连接到数据库的连接字符串的节,如下面的示例所示: <configuration> <connectionStrings>
<add name="SampleSqlServer" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
</connectionStrings>
</configuration>
ASP.NET 2.0 中有一个新的安全特性.可以对 Web.config 文件中的任何配置节进行加密处理,可以通过手工运行工具aspnet_regiis或者编程来完成这个工作。如果你可以直接访问你的Web 服务器,你可以通过运行如下的命令行: cd %windows%/Microsoft.NET/Framework/versionNumber aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" –prov -pd section
对配置节进行解密。此参数采用下面的可选参数: · -app virtualPath 指定应该在包含路径的级别进行解密。 · -location subPath 指定要解密的子目录。 · -pkm 指定应该对 Machine.config 而非 Web.config 文件进行解密。
-pdf section webApplicationDirectory
对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行解密。
-pe section
对指定的配置节进行加密。此参数采用下面的可选修饰符: · -prov provider 指定要使用的加密提供程序。 · -app virtualPath 指定应该在包含路径的级别进行加密。 · -location subPath 指定要加密的子目录。 · -pkm 指定应该对 Machine.config 而非 Web.config 文件进行加密。
-pef section webApplicationDirectory
对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行加密。
如果你是使用虚拟主机等不能访问物理的服务器,你仍然能够通过编程方式加密的连接字符串: 1 Configuration config = Configuration.GetWebConfiguration(Request.ApplicationPath);
2 ConfigurationSection section = config.Sections["connectionStrings"];
3 section.SectionInformation.ProtectSection("");;
4 config.Update ();或者 config.Save();
//加密web.Config中的指定节
private void ProtectSection(string sectionName)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null && !section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("");
config.Save();
}
}
//解密web.Config中的指定节
private void UnProtectSection(string sectionName)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null && section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
config.Save();
}
}
⑥ Web前端密码加密是否有意义
有必要
明文传输的是第三方的密码:Apple ID 与密码。因为这个是用户在另一个网站的数据,如果加密之后,虽然攻击者可以通过重放攻击重新进行登录,但是加密情况下无法获取到原始的 Apple ID 的账号和密码。
不加密的话如果HTTP请求被拦截的话就可以知道用户的原始密码了,这是一件要不得的事情。
如果被拦截了,不管怎样拦截者只要查看源码,模拟请求之后都能登陆上。但是因为很多用户目前来说基本上来说不会一个网站一个密码,而是对应着多个账户的。
加密更安全,不是为了完全阻挡攻击,而是为了提高攻击的成本,降低被攻下的概率。
QQ 网页上的登陆模块(全程HTTP/GET请求):
⑦ Web前端密码加密是否有意义
没有意义
首先,前端开发人员需要知道前端系统的控制完全掌握在用户手中,也就是说前端所做的事情和用户拥有完全的控制。据称,前端做了MD5,后台不必做,这种方法会有什么后果?如果有一天,系统数据库泄露,黑客直接获得每个用户的密码的MD5值,但这一次,因为黑客知道密码的哈希的前面,所以他不需要鼓风的MD5对应什么是原创,而是直接修改发送到服务器的客户端请求的在它的数据库密码字段MD5,符合数据库中的记录,你可以直接登录。这与直接存储明文密码没有区别!!!所以不管前端密码是否加密,后台使用哈希算法的安全内容转换都是必要的。(MD5不能使用BCrypt的,我以前回答类似:用图形表现,当前快速发展的快速哈希算法已成为不安全吗?)有一个人同意这个答案,我希望你不要被错误的答案误导。对方的回答,Linh说,是为了防止原始密码被利用在一个不安全的HTTP连接。但问题是,因为你的登录系统接受密码代替原来的,窃听者根本不需要原始密码,只要哈希结果可以伪造请求登录系统。这样做只会防止攻击者在社交攻击时使用原始密码,而不会提高网站的安全性。所以不管前面密码是不是加密的,使用HTTPS安全连接登录都是很有必要的。