第一次写文章,希望大牛们轻喷
一、代码审计安全
代码编写安全:
程序的两大根本:变量与函数
漏洞形成的条件:可以控制的变量“一切输入都是有害的 ”
变量到达有利用价值的函数(危险函数)“一切进入函数的变量是有害的”
漏洞的利用效果取决于最终函数的功能,变量进入什么样的函数就导致什么样的效果。
变量安全:
秉承一个原则 “一切输入都是有害的”
预定义变量[常规外部提交的变量]:
除了$_GET,$_POST,$_Cookie的提交之外,还来源于$_SERVER,$_ENV, $_SESSION 等register_globals = on [未初始化的变量] 当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它,PHP » 4.20 默认为off
变量覆盖[未初始化及覆盖前定义的变量]:
如:$$使用不当、遍历初始化变量、 extract() 、parse_str()等
变量的传递与存储[中转的变量]:
存储于数据库、文件[如配置、缓存文件等
函数安全:
“什么样的函数导致什么样的漏洞”
文件包含包含漏洞:require、include、require_once、include_once
代码执行执行任意代码漏洞:eval()、assert()、preg_replace()、create_function()
命令执行执行任意命令漏洞:exec()、passthru()、proc_open()、shell_exec()、system()、popen()
文件系统操作文件(目录)读写等漏洞:file_get_contents、file_put_contents、fopen、readfile
数据库操作SQL注入漏洞:select from、mysql_connect、mysql_query、mysql_fetch_row 数据显示 XSS漏洞:print、print_r、echo、print、sprintf、die、Var_dump、var_export
二、代码审计和漏洞验证:
环境:
PHP.ASP等语言环境
Apache.Tomcat.Ngin等中间件
Mysql.Oracle等数据库
工具:
Notepad++、Sublime等代码编辑器
Seay.RIPS等代码审计工具
Burp等漏洞验证工具
三、常见漏洞挖掘与防范:
根据功能点定向审计,例如在文件上传功能模块、文件管理功能模块、登录功能等模块进行漏洞挖掘验证。
通读全部代码
四、安全编程规范:
1.SQL注入防护
(1)采用预编译,在Java Web开发一般在采用预处理,在sql语句中放入?占位符,然后通过后面的传参传递参数,可在一定程度上防止SQL注入。
(2)过滤函数和类, 使用pdo的prepare方式来处理sql查询,但是当PHP版本