PermitRootLogin no StrictModes yesServerSignature Off ServerTokens Prod,我来为大家讲解一下关于网络安全防御的方法?跟着小编一起来看一看吧!

网络安全防御的方法(网络安全基线)

网络安全防御的方法

安全基线1、网络安全基线2、服务器安全基线2.1 Linux服务器安全基线

PermitRootLogin no StrictModes yes

2.2 Windows服务器安全基线3、WEB服务器安全基线3.1 apache服务器安全基线

ServerSignature Off ServerTokens Prod

Options -Indexes –FollowSymLinks

AllowOverride None

<Directory /> Order Deny, Allow deny from all </Directory>

www:User www Group www

<Directory "/var/www/html/admin"> Order Deny,Allow Deny from all Allow from 出口IP </Directory>

<Directory "/var/www/html/upload"> <FilesMatch ".(php|php5)$"> Deny from all </FilesMatch> </Directory>

<Directory "/home/work/data/www"> <FilesMatch ".(/svn/|/git/|sql)$"> Deny from all </FilesMatch> </Directory>

3.1 Nginx服务器安全基线

src/http/ngx_http_header_filter_module.c文件中的以下2行:

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: Xiaomi Web Server" CRLF; static char ngx_http_server_full_string[] = "Server: Xiaomi Security Team is hiring" CRLF;

location /admin/ { \## allow anyone in 192.168.1.1 allow 192.168.1.1; \## drop rest of the world deny all; }

location ~ /upload/.*\.(php|php5)?$ { deny all; }

## Only allow these request methods ## if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }

location ~ \.(/svn/|/git/|sql)?$ { deny all; }

3.2 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="/var/www/html/;

4、 常用的应用程序安全基线4.1 Mysql安全基线4.2. Sql server 2008安全基线

xp_cmdshell xp_delete_file xp_regread xp_regwrite xp_dirtree

4.3 Oracle安全基线

tcp.validnode_checking = yes \#允许访问的ip tcp.invited_nodes = (ip1,ip2…) \#不允许访问的ip tcp.excluded_nodes=(ip1,ip2,……)

  1. 关闭不必要的服务,只保留OracleServiceORCL和OracleOraDb11g_home1TNSListener;
  2. 禁止使用弱口令,建议锁定DBSNMP和SYSMAN用户;
  3. 数据与代码分离,禁止WEB应用与数据库使用同一台服务器;
  4. 每个数据库一个用户,禁止用户可以访问其他不必需的数据库。
  5. 禁止超级管理员远程登录,安全加固方法:

在spfile中设置 REMOTE_LOGIN_PASSWORDFILE=NONE;

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

4.4 Redis安全基线

rename-command FLUSHALL; rename-command FLUSHDB; rename-command CONFIG

4.5 Mongdb安全基线

nohttpinterface = true

rest = false

4.6. Memcache安全基线4.7. Rsync安全基线

hosts allow = X.X.X.X #允许访问的IP

secrets file = /etc/rsyncd.secrets #密码文件位置,认证文件设置,设置用户名和密码;

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

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

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

在默认情况下关闭内联DTD解析(Inline DTD parsing)、外部实体、实体,使用白名单来控制允许实用的协议。

  1. PHP:对于使用SimpleXml解析XML的方法可在加载实体之前添加LIBxmldisableentity_loader(true)语句以进制解析外部实体;
  2. 对于使用DOM解析XML的方法可在加载实体之前添加libxmldisableentity_loader(true);语句或者使用:

<?php // with the XMLReader functionality: $doc = XMLReader::xml($badXml,'UTF-8',LIBXML_NONET); ?>

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false);

通过将XmlReaderSettings.XmlResolver属性设置为XmlSecureResolver对象限制XmlReader可访问的资源。

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

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

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

from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

6. Android应用安全基线6.1. Android代码安全
  1. 防止app被冒用:验证app的证书和签名;
  2. 防止app被反编译:推荐使用proGuard、DexGuard保护安卓代码安全,DexGuard除了会混淆java代码还会用在Android资源和Dalvik字节码上;
  3. 防止敏感信息泄露:将代码中的敏感信息进行加密,防止反编译代码直接看到数据库密码等等敏感信息;
  4. 检测安装程序、模拟器、调试标志位防止逆向工程;
  5. 检查随机数生成类:在Android 4.2以下,SecureRandom是基于老版的Bouncy Castle实现的。如果生成SecureRandom对象后马上调用setSeed方法。SecureRandom会用用户设置的seed代替默认的随机源。使得每次生成随机数时都是会使用相同的seed作为输入,从而导致生成的随机数是相同的;
  6. 检查webview的使用:是否允许用户输入url访问网页,是否允许file等伪协议;
  7. 检查是否允许allowbackup
6.2. Android加密
  1. hash算法:
  1. 消息认证算法
  1. 对称加密算法
  1. 非对称加密
  1. 加密算法PBE
6.3. Android组件安全
  1. 正确使用AndroidManifest.xml文件
  2. 在代码级别上强制使用权限检查
  3. 保护content provider的路径(path)
6.4. 信息存储安全
  1. Shared Preferences
  1. SQLite数据库:使用SQLCiper加密数据库,使用手机特有的字符进行加密,防止重放
  2. 内部存储:敏感数据进行加密处理;
  3. 外部存储:外部存储是可以被任意app读取的,不要存储敏感信息,大文件存储的话参用加密处理
6.5. 网络传输安全
  1. 验证ssl自签名证书
  2. 避免错误的认为所有服务器的证书都是可信的,信任所有的证书
  3. 保护敏感信息,使用https传输数据,针对传输的敏感数据进行加密处理
  4. 服务器返回数据带有敏感信息的进行加密处理
6.6. 日志输出
  1. 在log中禁止输出敏感信息,包括用户信息,服务器信息及加密信息等;
  2. 使用Progurad进行日志擦除
,