C:\ProgramFiles\Java\jdk1.7.0_11\bin\keytool.exe
[lindows@Loadrunner19~]$ll/opt/soft/jdk1.7.0_11/bin/keytool-rwxrwxrwx1lindowslindows7957Jan1218:05/opt/soft/jdk1.7.0_11/bin/keytool
C:\ProgramFiles\Java\jdk1.7.0_11\bin>keytool-v-genkey-aliastomcat-keyalgRSA-keystored:/tomcat.keystore
C:\ProgramFiles\Java\jdk1.7.0_11\bin>keytool.exe-help
C:\ProgramFiles\Java\jdk1.7.0_11\bin>keytool.exe-genkey-help
linuxjdk7keytool
[lindows@Loadrunner19~]$/opt/soft/jdk1.7.0_11/bin/keytool--help
[root@Loadrunner19bin]#/usr/bin/keytool-
javax.net.ssl
JAVA加密技术
HTTPS和HTTP的区别
电信行业Http接口(通道)设计思路与实现过程
本页不但包含安全的内容,也包含不安全的内容.是否显示不安全的内容
从上面的code,可以看出代码中没有指定src属性,这样IE是没有办法知道这个iframe将引用的是安全内容还是不安全内容呢。所以会弹出上面的对话框。增加src属性,修改code:
再次run,对话框没有了,问题解决。附录:
在IE下,如果div悬浮在select上面。select会透过div显示出来。这非常影响视觉效果。网上有很多的解决办法,其中一个就是在div中增加iframe。我们就是通过这个方法的,但又产生了这个问题。
md5
16位和32位密码查询
MD5:670B14728AD9902AECBA32E22FA4F6BD
解密:000000
md5(13851897759,32)=7d3be18db14b452a11e4940ede114004md5(13851897759,16)=b14b452a11e4940e
md5(18651665725,32)=584285834b0032b2f809cde51228bb8emd5(18651665725,16)=4b0032b2f809cde5
md5(linezing.com,32)=be1fbc4210ef483dac295f1d7d424454md5(linezing.com,16)=10ef483dac295f1d
md5(kaixin001.com,32)=1e0cca7301a54982fe7010c5a404d5bfmd5(kaixin001.com,16)=01a54982fe7010c5
收录概况:
本站数据量不断增长中,是否收费可能也发生变动。
收录举例:
下面是查询较多的
SSL
PKI
security
重放攻击(Replayattack)是一种网络攻击,它恶意的欺诈性的重复或拖延正常的数据传输。
Java的简单MD5加密
/***MD5加密运算*@paramstr要加密的字符串,不为null*@returnresult加密后的MD5值*/publicStringgetMD5(Stringstr){MessageDigestmessageDigest=null;try{messageDigest=MessageDigest.getInstance("MD5");messageDigest.reset();//重置,供再次使用messageDigest.update(str.getBytes("UTF-8"));//使用指定的字节数组更新摘要,Char[]为编码为UTF-8}catch(NoSuchAlgorithmExceptione){e.printStackTrace();}catch(UnsupportedEncodingExceptione){e.printStackTrace();}byte[]byteArr=messageDigest.digest();//重置摘要,通过诸如填充之类的最终操作完成哈希计算StringBuffermd5Buffer=newStringBuffer();//构造一个字符串缓冲区,通过Append追加,装载加密后的值/**下面涉及到位运算,不懂,研究中。。。*/for(inti=0;i 重庆沙海硬件加密机 安全编码规范 版本号:V2.4.2 目录 1目标 2安全编码原则 3安全设计中的重要问题分布 4安全编码规范 4.1验证用户 1、身份验证 2、密码管理遵循的原则 4.2保护敏感数据 1、前端保护敏感数据 2、后端保护敏感数据 3、传输保护 4.3防止会话劫持和保护cookie 1、会话管理 2、cookie管理 4.4提供安全配置 4.5验证输入 4.7访问控制 4.8审核和记录活动和事件 1、错误处理 2、日志记录 4.9数据库安全性 4.10加密 4.11输出编码 5安全编码示例 5.1输入验证和数据合法性校验 避免SQL注入 避免XML注入 避免跨站点脚本(XSS) 避免类初始化的相互依赖 5.3表达式 不可忽略方法的返回值 不要引用空指针 使用Arrays.equals()来比较数组的内容 5.4数字类型和操作 防止整数溢出 避免除法和取模运算分母为零 5.5类和方法操作 敏感类不允许复制 比较类的正确做法 不要硬编码敏感信息 验证方法参数 不要使用过时、陈旧或低效的方法 数组引用问题 不要产生内存泄露 5.6异常处理 不要忽略捕获的异常 不允许暴露异常的敏感信息 不允许抛出RuntimeException,Exception,Throwable 不要捕获NullPointerException或其他父类异常 5.7多线程编程 确保共享变量的可见性 确保共享变量的操作是原子的 不要调用Thread.run(),不要使用Thread.stop()以终止线程 确保执行阻塞操作的线程可以终止 相互依存的任务不要在一个有限的线程池执行 5.8输入输出 程序终止前删除临时文件 及时释放资源 5.9序列化 不要序列化未加密的敏感数据 在序列化过程中避免内存和资源泄漏 反序列化要在程序最小权限的安全环境中 6安全编码检查 6.1输入和输出 6.2API程序 6.3跨站脚本 6.4响应截断 6.5重定向 6.6SQL和数据库 6.7SSL 6.8会话管理 6.9操作系统命令 6.10记录 6.11架构组件分析 6.12JavaScript/XMLHTTP 使用本规范可以实现: 1.确定安全Web应用程序的重要体系结构和设计问题。 2.设计时考虑重要部署问题。 3.制定能增强Web应用程序输入验证的策略。 4.设计安全的身份验证和会话管理机制。 6.实现有效的帐户管理方法,并保护用户会话。 7.对隐私、认可、防止篡改和身份验证信息进行加密。 8.防止参数操作。 9.设计审核和记录策略。 1.程序只实现指定的功能 2.永不要信任用户输入,对用户输入数据做有效性检查 3.必须考虑意外情况并进行处理 4.不要试图在发现错误之后继续执行 5.尽可能使用安全函数进行编程 6.小心、认真、细致地编程 图1 1、验证控制的执行代码放在服务器上 2、对所有的验证控件都使用一个集中的工具,包括调用外部认证服务的库 3、确保身份验证凭证不是以明文的形式在线传输的 4、保护身份验证cookie 5、只使用HTTPPOST请求发送身份验证凭据等敏感信息,只接受通过HTTP“POST”方法传递的信息,不可接受通过HTTP“GET”方法传递的信息 6、所有验证控件应该安全地失败 7、验证失败时进行模糊提示,失败响应不应该表明身份认证数据的哪一部分是不正确的的。例如,只是都使用“无效的用户名和/或密码”,而不是“无效的用户名”或“密码无效”。显示界面和源代码中的错误响应必须是真正的一致。 10、尽可能建立和利用标准的,被测试过的认证服务 1、强制要求密码的长度。八个字符是常用的,但16更好或考虑使用多单词组成词组 2、在用户的屏幕上输入的密码被遮蔽(例如,基于Web形式使用“密码”输入型) 3、密码重置和更改的操作需要与创建账户和身份验证相同的控制水平,密码重置发生时通知用户,同时密码重置的问题应该支持足够随机的答案。(例如,“最喜爱的书”是一个坏问题,因为“圣经”是一个非常普通的答案) 5、防止密码重复使用 6、建议对密码字段禁用“记住我”功能 7、注意密码的储存,不要在用户存储中存储密码,将其加密储存在服务器上,一般它以保密性强的单向密码哈希被储存(不要使用MD5算法)。使用强密码,并将随机salt值与该密码结合。对于重要的系统入口,可有多个密码,如:管理员密码,管理认证码。分别把他们存放在不同的位置:数据库与文件中,这种多密码大大增强系统的安全性(其中对密码的加密方法,见下文的加密) 8、建议设置密码有效期:密码不应固定不变,而应作为常规密码维护的一部分,通过设置密码有效期对密码进行更改。在应用程序设计阶段,应该考虑提供这种类型的功能 1、cookie中不要存放敏感信息,所有敏感信息存放在服务器。如果保存了敏感数据,应该确保整个cookie加密 2、如果状态数据必须存储在客户端,在服务器端使用加密和完整性检查,以便跟踪状态篡改 3、对包含敏感信息的网页禁用客户端缓存 2、应用程序应该支持对不再被需要的敏感数据的清除。(如个人资料或某些财务数据) 2、加密高度敏感的储存信息,如身份验证数据,即使在服务器端也要加密。并始终使用已审核好的算法 3、防止用户下载服务器端的源代码 5、删除不必要的应用程序和系统文件,因为这可以给攻击者揭示有用的信息 1、不要在HTTPGET请求参数中包括敏感信息 2、实现对所有敏感信息的传输进行加密,这应包括用于保护连接的TLS和可能是由离散加密敏感文件的一个补充或基于非HTTP连接 3、TLS证书应有效的(而不是过期的),并且有正确的域名 4、失败的TLS连接不应该回滚到一个不安全的连接 5、给所有连接指定字符编码 2、检查会话是如何储存的:例如,在数据库,在内存中等,以确定其安全性,必要时可以进行加密 3、设置会话的HTTP闲置超时 4、当无效的会话ID出现时,应有相应的处理程序 5、会话标识符在服务器上创建 6、会话管理控制应该使用审核好的算法,以确保足够随机的会话标识符 7、对任何重新验证都要生成一个新的会话标识符 9、建议为敏感操作附加除cookie之外的额外的强随机令牌,这种方法可以用来防止跨站请求伪造攻击 1、为涉及敏感信息而保密要求高的cookie和保密性要求不高的cookie分别设置不同的域和路径 4、将cookie设置为HttpOnly属性 1、确保服务器,框架和系统组件运行批准的最新版本,并且有为使用的版本发行的所有补丁 2、关闭目录列表 3、限制Web服务器,进程和服务账户具有可能的最少特权 4、发生异常时,要安全地失败 5、删除所有不必要的功能和文件 6、在部署之前,删除测试代码或不打算用于生产上的任何功能 7、禁用不必要的HTTP方法,如WebDAV扩展。如果必需有一个支持文件处理的扩展的HTTP方法,那么要利用一个良好的审核认证机制 8、应用程序的安全配置存储应能以可读的形式输出,以便支持审计 9、实施一个软件变更控制系统来管理和记录在开发和生产中代码的变更 1、在验证前将数据编码为一个共同的字符集,如UTF-8(规范化,标准化)。标准化是指将数据转化为标准形式的过程。文件路径和URL尤其倾向于标准化问题,许多广为人知的漏洞利用都直接源自标准化缺陷 2、验证预期的数据类型、范围、长度 3、使用服务器端代码执行其自身的验证。以免攻击者绕过客户端或关闭客户端脚本例程(例如,通过禁用JavaScript脚本) 4、所有的验证失败都导致输入拒绝,拒绝已知的有害的输入 5、在处理数据前,验证客户提供的所有数据,包括所有的参数。确保所有可以被恶意用户修改的输入,例如:HTTP头(例如cookies名称和值),URLs,输入字段,隐藏字段,下拉列表和其他Web组件,都被正确地验证。一定要包括从JavaScript,Flash或其他嵌入式代码的自动返回值 6、只要有可能,按照允许字符的白名单,对所有的输入进行验证: 如果任何有潜在危险的字符必须允许作为输入,确保执行了额外的控制来过滤输入。 常见的危险字符的例子包括:<>“”%()&+\\“\”; 谨慎检查是否为空字节(00%),检查新行字符(\R\N%0D%0A); 检查“点-点-斜线”(../..\)路径改变字符; 过滤输入示例:使用URL编码或HTML编码来包装数据,并将其作为文本而不是可执行脚本来处理。HtmlEncode方法去除HTML字符,而UrlEncode方法对URL进行编码,使其成为有效的URL请求。 7、建议使用一个应用程序的集中输入验证例程,考虑集中式验证方法,例如,通过使用共享库中的公共验证和筛选代码。这可确保验证规则应用的一致性,此外,还能减少开发的工作量,且有助于以后的维护工作 1、确保应用程序已明确定义了用户角色和其对应的权利 2、确保在操作中使用最少的特权,限制用户对系统级资源的访问 5、确保开发/调试的后门程序不在生产代码中出现,以免泄露敏感信息 6、实现最少的权限,限制用户只有对那些执行他们的任务所需要的功能,数据和系统信息具有权限 2、访问控制应该安全失败 3、对于GET方式的请求,不能仅仅依赖“referer”头作为检查手段,因为它是可以被欺骗的。对于POST方式的请求,在通常范围内检查“referer”头可以保证一定程度的安全性 7、服务器端执行和表示层表示的访问控制规则必须匹配 10、实现账户的审计,强制禁用不可用的账户(例如,一个账户的密码到期后超过了30天) 12、服务账户或支持连接到/或来自外部系统的连接,应该被授予可能最少的特权 1、应用程序应该处理应用错误(而不是依赖于服务器的配置),使用不显示调试或堆栈跟踪信息的错误处理程序,在错误响应中不要泄露敏感信息,包括系统的详细信息,会话标识符或账户信息 2、确保应用程序是以安全的方式失败的 3、实施一般性错误消息,并使用自定义错误页面,确保异常和错误情况被正确的处理了,并正确释放分配的内存,释放资源 1、所有的记录控制应该在一个可信任的系统(例如,服务器)上执行并且记录的控制应该支持指定的安全事件的成功和失败 2、确保日志中包含一些重要的日志的事件数据,但不要在日志中存放敏感信息,包括不必要的系统详细信息,会话标识符或密码 3、确保包括不可信任的数据的日志条目在预定的日志查看界面或软件中不会作为代码执行 5、确保存在一种机制来进行日志分析 6、记录所有的输入验证失败 7、记录所有验证尝试,尤其是失败的 8、记录所有的访问控制失败的信息 9、记录所有明显的篡改事件,包括状态数据的异常改变 10、记录连接到无效或过期的会话令牌的尝试 11、记录所有系统异常 12、记录所有的行政职能,包括安全配置设置的更改 13、记录所有后端的TLS连接失败的信息 14、记录加密模块故障 15、使用加密哈希函数来验证日志条目的完整性 1、使用强类型参数化查询 2、使用PreparedStatement预编译语句,传入的任何内容就不会和原来的语句发生任何匹配的关系 3、使用输入验证和输出编码,同时确保解决元字符。如果这些都失败了,不要运行数据库命令 4、应用程序访问数据库时,其应使用尽可能低水平的特权 5、对数据库访问使用加密连接 6、在应用程序中,连接字符串不应该使用硬编码。连接字符串应该储存在一个可信任的系统的单独的配置文件中,并且他们应该被加密。 7、使用储存过程来抽象数据访问 8、删除或更改所有默认的数据库管理密码。使用强密码或实施多因子身份认证 9、关闭所有不必要的数据库功能(例如,不必要的存储过程或服务,使用工具包,只安装最低要求的功能和选项设置(受攻击面减少)) 10、禁用任何不需要的默认账户 11、建议应用程序应该为每个信任的区别(例如,用户、只读用户、访客、管理员)用不同的凭据连接到数据库 1、用来对应用程序用户保密的加密功能必须在一个可信任的系统上执行 2、对连接字符串进行加密,防止用户非法得到数据库连接密码 3、加密模块应该安全地失败 4、所有的随机数,随机文件名,随机GUID,以及随机字符串,当需要它们的随机值是不可猜测时,应该使用加密模块批准的随机数生成器产生 5、妥善管理加密密钥 6、不要自创加密方法,以免减弱保护能力 7、使用正确的算法和密钥大小,密钥越大,安全性越高 数据加密标准: (DES)64位密钥(8个字节); TripleDES128位密钥或192位密钥(16或24个字节); AES128位密匙、192位密匙或256位密匙(16、24或32个字节); RSA384–16,384位密钥(48–2,048个字节); 对于大量数据加密,应使用TripleDES对称加密算法;对于加密等级要求高,并且要高效快捷的加密一个区段时,应使用AES算法。要对将暂时存储的数据加密,可以考虑使用较快但较弱的算法,如DES。对于数字签名,应使用RSA或DSA算法。对于哈希,应使用SHA1算法。对于用户键入的哈希,应使用基于哈希的消息验证(HMAC-SHA1)算法。 8、确保加密密钥的安全:使用DPAPI来回避密钥管理;定期回收密钥,以防密码的泄露。 1、在受信任的系统上执行所有的编码(例如,服务器) 2、对所有字符进行编码,除非他们被称为对web编译器是安全的 3、对出站编码的每种类型都运用一个标准的,被测试过的方法: 输出的种类以及其对应的防御手段: 1)支持HTML代码的输出:过滤。输出前要确保代码中不含有跨站攻击脚本。 2)对不支持HTML的输出:HTML编码。在输出到页面前要进行HtmlEncode编码,部分服务器控件或者XSLT转换本身就支持HtmlEncode编码,可不必进行重复编码。 3)对于URL的输出:URL编码。要对输出URL进行UrlEncode处理。 4)页面内容的输出:转换特殊符号的编码形式,防止因特殊符号而出现错误,或跨站。 a.对于js脚本的输出,要确保输出代码中不包含跨站脚本,注意“‘”和“”“的输出,以免被组合成危险的js代码。 b.对于style样式的输出,要确保样式的正确性。 c.对于xml数据的输出,要确保数据中是否有XML不允许的字符,要对特殊字符进行转换才能输出。 使用PreparedStatement预编译SQL,解决SQL注入问题,传递给PreparedStatement对象的参数可以被强制进行类型转换,确保在插入或查询数据时与底层的数据库格式匹配。 publicvoiddoPrivilegedAction( Stringusername,char[]password )throwsSQLException{ Connectionconnection=getConnection(); if(connection==null){ //Handleerror } try{ Stringpwd=hashPassword(password); //Ensurethatthelengthofusernameislegitimate if((username.length()>8){ StringsqlString= "select*fromdb_userwhereusername=andpassword="; PreparedStatementstmt=connection.prepareStatement(sqlString); stmt.setString(1,username); stmt.setString(2,pwd); ResultSetrs=stmt.executeQuery(); if(!rs.next()){ thrownewSecurityException("Usernameorpasswordincorrect"); //Authenticated,proceed }finally{ connection.close(); }catch(SQLExceptionx){ //forwardtohandler 使用存储过程 Stringcustname=request.getParameter("customerName");//ThisshouldREALLYbevalidated CallableStatementcs=connection.prepareCall("{callsp_getAccountBalance()}"); cs.setString(1,custname); ResultSetresults=cs.executeQuery(); //…resultsethandling }catch(SQLExceptionse){ //…logginganderrorhandling 通过StringBulider或StringBuffer拼接XML文件时,需对输入数据进行合法性校验。 对数量quantity进行合法性校验,控制只能传入0-9的数字: if(!Pattern.matches("[0-9]+",quantity)){ //Formatviolation StringxmlString=" " " outStream.write(xmlString.getBytes()); outStream.flush(); 或者 classCustomResolverimplementsEntityResolver{ publicInputSourceresolveEntity(StringpublicId,StringsystemId) throwsSAXException,IOException{ //checkforknowngoodentities StringentityPath="/home/username/java/xxe/file"; if(systemId.equals(entityPath)){ System.out.println("Resolvingentity:"+publicId+ ""+systemId); returnnewInputSource(entityPath); }else{ returnnewInputSource();//Disallowunknownentities //byreturningablankpath classXXE{ privatestaticvoidreceiveXMLStream(InputStreaminStream, DefaultHandlerdefaultHandler) throwsParserConfigurationException,SAXException,IOException{ SAXParserFactoryfactory=SAXParserFactory.newInstance(); SAXParsersaxParser=factory.newSAXParser(); //TosettheEntityResolver,anXMLreaderneedstobecreated XMLReaderreader=saxParser.getXMLReader(); reader.setEntityResolver(newCustomResolver()); reader.setErrorHandler(defaultHandler); InputSourceis=newInputSource(inStream); reader.parse(is); publicstaticvoidmain(String[]args) receiveXMLStream(newFileInputStream("evil.xml"), newDefaultHandler()); 对产生跨站的参数进行严格过滤,禁止传入