明天要去百度钱包面试,整理出一些关于安全的一些东西.
常见攻击方法
sql 注入
string 型SQL注入
string 型sql注入一般是由对特殊字符过滤不严格导致的. NULL ’ ” \
int型 sql 注入
int 型sql注入 在数字后面加入其它关键字
$res = "1 union select";
echo intval($res); // 1
解决办法:
1.开启GPC 对 COOKIE, POST,GET 的值进行过滤;
2.可利用 addslashes() 函数 实现四种符号过滤( ’ ” \ NULL );
3.可是用PDO prepare处理sql语句,通过预先编译,将sql模板与sql变量分两次发送给mysql,变量的转义处理由mysql来执行
XSS 注入
反射型XSS
一般攻击者会将一个带有参数的URL进行伪装,诱惑你点击,当你点击后就会获得你的一些信息;
存储型XSS
最典型的例子是留言板,将带有特殊标签的代码插入你的数据库,当你读取的时候,代码就会执行;
两者本质上并无区别
解决办法
1.将可执行的标签事件加入白名单中,并用正则表达式匹配,有则行,无责止.
2.可是用一些过滤脚本标签函数进行过滤;
CSRF 攻击
CSRF攻击的原理是基于web浏览器的隐式身份验证机制,可以确保是一个浏览器发出的,但确保不了用户批准与否.
解决方案:
1.可在后台生成一串秘钥,提交表单时验证其一致性,true则过,false则止.
2.在敏感位置加入验证码
3.在加入一个验证cookie 提交的时候带如后台进行验证.
常见加密方式
mcrypt 扩展是 php加密支持库.开启后支持一些常见的算法跟模式(未深究)
对称加密
可凭借加密串对数据进行加密与解密,常见算法有 DES,3DES,RC2,RC4,RC5,AES等.
非对称加密
有私钥 与 公钥,加密解密使用不同的秘钥,创建算法RSA,加密解密速度相对较慢.
单向加密
常用的单向加密算法有MD5() 32位字符 sha1() 40位字符,相同的字符串产生的结果是一样的,为避免碰撞,建议添加salt.
业务中的一些安全建设
密码
1.密码设置的尽量复杂,
2.MD5(密码)+salt
后台地址隐藏.
防止暴力破解
服务器版本信息隐藏
防止针对该服务器出现的漏洞攻击
php版本的以藏
防止针对该版本php漏洞进行攻击
API站库分离
单独跑一台API服务器,数据库只允许API服务器访问.
在API服务器上监控调频率.防止拖库
第三方服务
因为会执行比人的JS 尽量选择大厂