1、参数化查询
需要操作数据库,务必通过参数传递值,避免SQL语句拼接导致SQL注入漏洞。
2、输入验证
1)对数据进行合法性检查;
2)对数据进行精确匹配;
3)接受白名单的数据;
4)拒绝黑名单的数据;
5)对匹配黑名单的数据进行编码。
在PHP中可由用户输入的变量列表如下:
$_SERVER
$_GET
$_POST
$_COOKIE
$_REQUEST
$_FILES
$_ENV
$_HTTP_COOKIE_VARS
$_HTTP_ENV_VARS
$_HTTP_GET_VARS
$_HTTP_POST_FILES
$_HTTP_POST_VARS
$_HTTP_SERVER_VARS
3、服务端数据校验
对于敏感数据的提交和传递,应该在服务端进行校验,以避免客户端绕过。
4、Cookie安全
PHP中可以使用Setcookie函数设置cookie的httponly属性,以避免潜在的跨站脚本攻击漏洞盗取用户cookie从而冒用身份发起进一步攻击。
5、登陆安全
1)验证方式
应至少验证用户名、密码和验证码,有条件可以验证动态口令、手机动态密码。
2)验证流程
应遵循顺序、模糊的思想。首先验证验证码、其后匹配账号和密码。
3)验证错误信息
不应给出过于具体的错误信息,如用户名错误、密码错误等。
4)基于用户名锁定而非IP
为避免攻击者更换IP绕过锁定,应记录用户登陆行为,并对连续多次登陆错误的用户名进行临时锁定。
6、文件上传安全
文件上传存在被利用上传webshell的风险,应该加强控制。建议采取以下措施:
1)使用白名单方式检测文件后缀;
2)不使用原文件名。上传之后按时间能算法生成文件名;图片文件可使用Getimagesize获取的mime来给予图片类文件拓展名;
3)上传目录脚本文件不可执行;
4)对于图片上传,可以使用PHP GD库重绘图片。
7、URL设计安全
1)为降低被攻击风险,登陆和管理地址应使用不易被猜到的URL;
2)为降低被猜解风险,重置密码链接应一次有效且随机不易被猜解;
8、使用强加密算法加密敏感信息
即使存在SQL注入漏洞,导致密码密文被猜解,攻击者也很难获得对应的明文,从而降低管理后台被攻击的风险;
即使数据库经其他途径泄露,也为暴力猜解增加了不小难度。
9、敏感操作页面置隐藏页面hash
为避免请求伪造漏洞造成非主观的敏感操作,应该在敏感操作页面设置隐藏hash,验证敏感操作的合法性,避免伪造请求。
10、统一的错误处理
网站应使用统一的错误处理机制,屏蔽详细的错误信息,避免造成敏感信息泄露。
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)