rsa算法加密字符串,rsa算法及原理

  

  安全基线1。网络安全基线采用白名单系统在网络级别制定ACL,只对必要的端口(如80或443等。)对外网开放;同一网段的服务器要和其他服务器划分到不同的Vlan,防止被ARP欺骗;生产环境网络必须与办公网络隔离;只允许导出IP和fort机连接服务器的管理端口2,服务器安全基线2.1最低安装Linux服务器安全基线操作系统,只安装业务必需的服务;服务器禁止使用弱密码,所有服务器禁止使用同一个密码;使用iptables在服务器级别创建ACL,只允许出口IP连接ssh,并打开必要的端口(80或443等。)到外网;禁止root用户直接登录SSH。安全增强方法:Permitrootlogin NostricModels Yes使用SSH协议版本2。安全加固方法是:协议2,1改为协议2Mysql,Redis,Memcache,Mongodb等应用只允许在内网网卡上进行监控。2.2 Windows server security baseline使用正版、干净的安装盘安装操作系统;设置强密码,禁止所有服务器使用同一密码;配置IPSEC,仅允许出口IP访问远程桌面,并打开必要的端口(80或443等。)到外网;确保正式上线前完成所有补丁,设置可以自动安装补丁但不自动重启;安装杀毒程序并能自动更新病毒库;禁止安装与业务无关的第三方软件。3.WEB服务器安全基线3.1 Apache服务器安全基线隐藏了Apache的版本和操作系统信息,以防止敏感信息。安全加固方法:服务器签名OffserverTokens Prod禁止目录枚举和符号链接跨越DocumentRoot。安全方法:Options -Indexes -FollowSymLinks禁止用户用。htaccess文件,安全方法:AllowOverride None禁止访问站点目录外的文件,安全方法:Directory /Order Deny,Allowdeny from all/Directory禁用不必要的模块,保持最小化原则。安全加固方法是注释掉以下不必要的模块:mod _ imap、mod _ include、mod _ info、mod _ userdir、mod _ autoindex等。Apache被禁止作为根用户直接运行。Apache要创建独立的运行账号,比如www:User wwwGroup www,管理后台等重要目录要设置ACL。安全加固方法如下:Directory '/var/www/html/admin ' order deny,allow deny from all allow from exit IP/Directory删除用户上传目录的脚本执行权限,防止攻击者写入webshell。安全方法:directory '/var/www/html/upload ' files match '。(PHP | PHP 5) $ '拒绝所有/files match/目录。git,git目录和文件。sql格式被禁止,以防止源代码或数据库SQL文件泄漏。安全方法:目录'/home/work/data/www' filesmatch '。(/SVN/|/git/| SQL)$ ' deny from all/files match/directory 3.1 Nginx服务器安全基线防止操作系统和Nginx版本泄露,安全方法:server _ tokens off通过更改src/http/ngx _ http _ header _ filter _ module . c文件中的以下两行来修改Nginx的横幅信息:   

  

  static char ngx _ http _ server _ string=' server : nginx ' CRLF;static char ngx _ http _ server _ full _ string=' server : ' NGINX _ VER CRLF;修改为:   

  

  static char ngx _ http _ Server _ string=' Server :小米Web服务器' CRLF;static char ngx _ http _ server _ full _ string=' server :小米安全团队正在招聘' CRLF;为站点的管理后台目录设置ACL,安全加固方法为:location/admin/{\ # #允许192.168.1.1中的任意一个允许192 . 168 . 1 . 1;\ # # #丢弃世界上的其他内容否定所有内容;}删除用户上传目录的脚本执行权限,防止用户写入webshell。安全加固方法是:location ~ /upload/。*\.(php|php5)?$ {全部拒绝;}禁止不必要的http方法,仅以下配置   

保留了GET、POST和HEAD方法:## Only allow these request methods ##if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}禁止访问.svn/.git目录及.sql格式的文件,防止代码或数据库文件泄漏,安全加固方法:location ~ \.(/svn/|/git/|sql)?$ {deny all;}3.2 PHP配置安全规范关闭暴露php版本信息:expose_php=Off关闭可以用远程代码执行的相应参数:allow_url_fopen=Off allow_url_include=Off禁用危险函数:disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source错误的信息处理: display_errors=Off log_errors=On error_log=/var/log/httpd/php_scripts_error.log #便于分析使用open_basedir限制php对文件的访问权;open_basedir="/var/www/html/;为php创建单独的用户和用户组;为php用户创建单独的用户和用户组,不可以直接以root用户身份执行php程序。4、 常用的应用程序安全基线4.1 Mysql安全基线Mysql端口禁止监听在外网网卡上;禁止使用弱口令并删除匿名账户;禁止使用root用户启动mysql;禁止除了root和mysql启动用户之外的其他用户对mysql的数据目录有读写权限;每个mysql数据库对应一个mysql用户,禁止mysql用户可以访问与之无关的数据库;严格遵循数据与代码分离的原则,禁止WEB服务与mysql运行于同一台服务器。4.2. Sql server 2008安全基线限制可以访问数据库的IP,采用白名单机制,只允许信任的IP连接;禁止将数据库端口监听在外网网卡中;修改日志审核策略, 将登录审核修改为“开启登录成功和失败的日志”;禁止使用弱口令;每个数据库一个用户,权限为PUBLIC,禁止用户可以访问其他不必需的数据库;使用NETWORK SERVICE账户来启动数据库;严格遵循数据与代码分离的原则,禁止数据库与WEB服务使用同一台服务器;禁用以下高危的存储过程:xp_cmdshellxp_delete_filexp_regreadxp_regwritexp_dirtree4.3 Oracle安全基线禁止监听在外网网卡上;利用iptables和oracle的监听器设置ACL,安全加固方法: tcp.validnode_checking = yes\#允许访问的iptcp.invited_nodes = (ip1,ip2…)\#不允许访问的iptcp.excluded_nodes=(ip1,ip2,……)关闭不必要的服务,只保留OracleServiceORCL和OracleOraDb11g_home1TNSListener; 禁止使用弱口令,建议锁定DBSNMP和SYSMAN用户;数据与代码分离,禁止WEB应用与数据库使用同一台服务器;每个数据库一个用户,禁止用户可以访问其他不必需的数据库。禁止超级管理员远程登录,安全加固方法:在spfile中设置 REMOTE_LOGIN_PASSWORDFILE=NONE;

  

在sqlnet.ora中设置 SQLNET.AUTHENTICATION_SERVICES=NONE 禁用SYSDBA角色的自动登录

  

4.4 Redis安全基线禁止监听在外网网卡上;为Redis设置强壮的口令,requirepass yourpassword;禁止以Root权限启动redis;禁用以下危险指令:rename-command FLUSHALL;rename-command FLUSHDB;rename-command CONFIG4.5 Mongdb安全基线禁止监听在外网网卡上;为Mongodb设置强壮的口令,启动时加上--auth参数;禁用HTTP接口,安全加固方法为:nohttpinterface = true禁用rest接口,该接口不支持安全认证机制,安全加固方法为: rest = false利用iptables设置ACL,只允许信任的IP连接。4.6. Memcache安全基线禁止以root权限启动;禁止监听到外网网卡上;利用iptables做好ACL,只允许必需的服务器连接。4.7. Rsync安全基线禁止以root用户权限启动;设置允许连接的IP列表,安全加固方法:hosts allow = X.X.X.X #允许访问的IP设置访问口令,安全加固方法为:secrets file = /etc/rsyncd.secrets #密码文件位置,认证文件设置,设置用户名和密码;

  

auth users = rsync #授权帐号,认证的用户名,如果没有这行则表明是匿名,多个用户用,分隔。

  

利用iptables设置ACL,只对信任的IP开放873端口,安全加固方法如下:iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT排除.svn和.git目录,防止客户端上传后导致源码泄漏,安全加固方法:exclude = .svn/ .git/5、 WEB应用安全规范5.1. 认证安全OAuth 认证安全SSO 认证安全5.2. 防御XSS在html属性中的输出,使用htmlencode进行处理,不过更为保险的做法是:除了字母和数字之外,其他所有的特殊字符都编码为htmlentities;在<script>中的输出,采用的javascriptEncode;在事件中的输出,采用javascriptEncode防止符号的闭合;在css中的输出,禁止用户可控制的遍历出现在<style>、css文件中。 推荐使用owasp的encodeForCSS()`函数进行加密,也就是除了字母和数字之外的特殊字符都编码成十六进制的形式在地址中的输出,使用urlEncode即可,将特殊字符进行url编码转换。 其中比较特殊的就是伪协议的url,例如javascript,dataurl,这种的话对url进行判断是否是http协议的url地址;针对富文本的处理,富文本的xss防御比较多样化,除了上述的一些,还应注意使用白名单标签,避免使用黑名单标签;针对dom型xss,在$var变量进入<script>时,应该先执行一次javascriptencode,在dom输出到html页面时候也需要区别对待,如果是输出到事件或者脚本中,则需要在做一次javascriptencode,如果是输出到html或者属性,则需要做一个htmlencode。5.3. 防御SQL注入使用预编译语句;防御sql注入最佳的方式就是使用预编译语句,绑定变量;在php中使用bindParameter()`函数;使用安全的的存储过程;检查数据类型;使用安全函数5.4. 防御CSRF(跨站请求伪造)验证码被认为是对抗CSRF简洁而有效的防御方法;referer检测;增加CRSF token认证5.5. 防御代理执行漏洞能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用;对于可控点是程序参数的情况,使用escapeshellcmd函数进行过滤;对于可控点是程序参数的值的情况,使用escapeshellarg函数进行过滤;参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义。5.6. 防御点击劫持(Clickjacking)使用X-FRAME-OPTIONS;使用js判断当前也没是否是top页面。5.7. 防御SSRF过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准;统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态;限制请求的端口为http常用的端口,比如,80、443、8080、8090;黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网;禁用不需要的协议,仅仅允许http和https请求。5.8. 防御URL重定向加入referer的限制,保证该URL的有效性,避免恶意用户自己生成跳转链接;加入有效性验证Token,避免用户生成自己的恶意链接从而被利用(但是如果功能本身要求比较开放,可能会产生一定的限制);设置严格白名单及网络边界:功能要求比较开放的情况下,需要严格限定协议以及可访问的网络。5.9. 防御XXE(xml实体注入)在默认情况下关闭内联DTD解析(Inline DTD parsing)、外部实体、实体,使用白名单来控制允许实用的协议。

  

PHP:对于使用SimpleXML解析XML的方法可在加载实体之前添加libxmldisableentity_loader(true)语句以进制解析外部实体;对于使用DOM解析XML的方法可在加载实体之前添加libxmldisableentity_loader(true);语句或者使用:<?php// with the XMLReader functionality:$doc = XMLReader::xml($badXml,'UTF-8',LIBXML_NONET);?>JAVA:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);.NET通过将XmlReaderSettings.XmlResolver属性设置为XmlSecureResolver对象限制XmlReader可访问的资源。

  

通过将XmlReaderSettings.XmlResolver属性设置为null,不允许XmlReader打开任何外部资源。

  

对于利用超大的XML文档进行拒绝服务攻击的问题,使用XmlReader时,通过设置MaxCharactersInDocument属性,可以限制能够分析的文档大小。

  

通过设置MaxCharactersFromEntities属性,可以限制从扩展实体中生成的字符数。

  

Python from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))6. Android应用安全基线6.1. Android代码安全防止app被冒用:验证app的证书和签名;防止app被反编译:推荐使用proGuard、DexGuard保护安卓代码安全,DexGuard除了会混淆java代码还会用在Android资源和Dalvik字节码上;防止敏感信息泄露:将代码中的敏感信息进行加密,防止反编译代码直接看到数据库密码等等敏感信息;检测安装程序、模拟器、调试标志位防止逆向工程;检查随机数生成类:在Android 4.2以下,SecureRandom是基于老版的Bouncy Castle实现的。如果生成SecureRandom对象后马上调用setSeed方法。SecureRandom会用用户设置的seed代替默认的随机源。使得每次生成随机数时都是会使用相同的seed作为输入,从而导致生成的随机数是相同的;检查webview的使用:是否允许用户输入url访问网页,是否允许file等伪协议;检查是否允许allowbackup6.2. Android加密Hash算法:建议使用SHA-256、SHA-3算法;不建议使用MD2、MD4、MD5、SHA-1、RIPEMD算法来加密用户密码等敏感信息;不要使用哈希函数做为对称加密算法的签名;注意:当多个字符串串接后再做hash,要非常当心消息认证算法建议使用HMAC-SHA256算法,避免使用CBC-MAC对称加密算法建议使用AES算法DES默认的是56位的加密密钥,已经不安全,不建议使用注意加密模式不要使用ECB模式Android 提供的AES加密算法API默认使用的是ECB模式,所以要显式指定加密算法为:CBC或CFB模式,可带上PKCS5Padding填充。AES密钥长度最少是128位,推荐使用256位。非对称加密注意密钥长度不要低于512位,建议使用2048位的密钥长度;使用RSA算法做加密,RSA加密算法应使用Cipher.getInstance(RSA/ECB/OAEPWithSHA256AndMGF1Padding),否则会存在重放攻击的风险。加密算法PBE使用基于口令的加密算法PBE时,生成密钥时要加盐,盐的取值最好来自SecureRandom,并指定迭代次数。6.3. Android组件安全正确使用AndroidManifest.xml文件在代码级别上强制使用权限检查保护content provider的路径(path)6.4. 信息存储安全Shared Preferences使用Secure-Preference对Shared Preferences进行保护基于口令的加密,使用PBE加密基于密钥的加密,密钥存储在系统密钥链(keychain)SQLite数据库:使用SQLCiper加密数据库,使用手机特有的字符进行加密,防止重放内部存储:敏感数据进行加密处理;外部存储:外部存储是可以被任意app读取的,不要存储敏感信息,大文件存储的话参用加密处理6.5. 网络传输安全验证ssl自签名证书避免错误的认为所有服务器的证书都是可信的,信任所有的证书保护敏感信息,使用https传输数据,针对传输的敏感数据进行加密处理服务器返回数据带有敏感信息的进行加密处理6.6. 日志输出在log中禁止输出敏感信息,包括用户信息,服务器信息及加密信息等;使用Progurad进行日志擦除

相关文章