web安全
一。sql注入:
原因: 由于恶意用户输入一些sql语句的关键字,达到欺骗服务器执行恶意的sql语句
预防:永远不要相信用户的输入,过滤掉一些关键字。使用安全的API
解决办法:
1.PDO 禁用模拟预处理语句,并使用 real parepared statements 。这可以确保SQL语句和相应的值在传递到mysql服务器之前是不会被PHP解析的(禁止了所有可能的恶意SQL注入攻击)
2.addslashes() 函数在指定的预定义字符前添加反斜杠。
3.使用正则过滤:eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfiel', $str);
后果:注入能够导致数据丢失,数据被破坏等等。。
二。失效的身份认证与会话管理:
原因: 用户在退出,密码管理,超时,记住我,秘密问题等这些都有可能引起该问题
预防:用户认证时,是否使用hashing或加密保护,用户名,密码不要太简单
会话ID是否暴露在URL中。
后果:用户的隐私会暴露的,
三。XSS:
原因:跨站脚本攻击,它允许恶意web用户将代码植入到提供给其他用户使用的页面中
,比如这些代码包括HTML代码和客户端脚本。
解决办法:
<?php
if (isset($_POST['name'])){
$str = trim($_POST['name']); //清理空格
$str = strip_tags($str); //过滤html标签
$str = htmlspecialchars($str); //将字符内容转化为html实体
$str = addslashes($str);
echo $str;
}
?>
预防:将一些不可信数据进行恰当的转义
后果:盗取各类用户账号,控制的企业数据,网站挂马等等
四。不安全的对象引用:
原因:某些系统数据类型,是否有的用户只具有部分访问权限。
预防:使用基于用户或者会话的间接对象引用,检查访问。防止不安全的直接对象引用。
后果:这种漏洞能破坏通过该参数引用的所有数据,攻击者很容易访问该类型的所有数据
五。安全配置错误:
原因: 配置的不够安全.
预防;一个能在组件之间提供有效的分离和安全性的强大应用程序家够实施漏洞扫描,和经常进行审计以帮助检测错误配置或没有补丁,能够及时了解并部署环境的所有最新软件更新和补丁的过程。还有就是一个比较安全的架构,实施漏洞扫描等等。
后果:可以使攻击者能经常访问一些未授权的系统数据或功能。导致系统完全攻破
六。敏感信息泄露:
原因:数据被长期存储,但是这些敏感数据没有被加密,不应该明文传输。或者使用比较脆弱的算法,
预防:使用一些比较强大的加密算法。对于没有必要存放的隐私数据,应及时删除。禁用包含敏感数据的 缓存页面。
解决办法:
使用这些加密算法:
如 bcrypt,PBKDF2,scrypt.
后果:导致一些隐私数据外露,影响公司形象
七。功能级访问控制缺失:
原因:用户界面存在未授权功能的导航,服务器端的身份认证或者授权功能不完善。还有可能自己的代码没有做好访问控制。
预防:明确授予特定角色的访问权限,
后果:这种漏洞允许攻击者访问未授权的功能,管理性的功能是主要目标
八。跨站请求伪造CSRF
原因:伪装来自信任用户的请求来利用信任的网站。比xss更加具有危险性
解决办法:
验证HTTP Referer字段
在请求地址中添加token并验证
在HTTP头中添加自定义属性并验证
尽量少用或不用request()变量
当用户关闭页面时要及时清除认证的cookie。
预防:在每个http请求中添加一个不可测的令牌,并且是唯一的。并且不能暴露在URL中
后果:欺骗受害用户完成受害者所允许的任意状态。
九。使用含有已知漏洞的组件
原因:使用不安全的组件如框架库,被一些自动化工具发现和利用
预防: 保证自己自己使用的组件是最新的,关注这个组件的一些安全问题
后果: 组件的一些安全问题影响到自己代码的安全
十。未验证的重定向和转发: //重定向是客户端行为,转发是服务器行为.
原因:没有验证的一些重定向和转发
解决办法:
审查所有使用重定向或转发的代码,每一次使用都应该验证目标url中是否包含任何参数值,并且这些url不在白名单中,这时应该禁止重定向或者转发。
预防:避免使用重定向和转发,如果使用了,则不要在计算目标时涉及用户的数据,或则确定是否安全并授权
后果:这种重定向有可能试图安装恶意软件,或则是让受害者泄露密码。不安全的转发可能允许绕过访问控制