文档章节

PHP常见的安全问题汇总

LauraOSC
 LauraOSC
发布于 2017/05/11 11:21
字数 806
阅读 11
收藏 0

一. XSS(跨站脚本攻击)

可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案:
  ● 直接过滤所有的JavaScript脚本;
  ● 转义Html元字符,使用htmlentities、htmlspecialchars等函数;
  ● 系统的扩展函数库提供了XSS安全过滤的remove_xss方法;
  ● 新版对URL访问的一些系统变量已经做了XSS处理。

二:Server相关的配置信息被暴露,未进行模糊处理

1.http {

……省略配置
server_tokens off;   ->即可隐藏版本号
…….省略配置
}
重启nginx后,我们返回的Server头格式为Server:nginx ,而且nginx自己的404页面也没有版本号的信息
2.返回自定义的server  混淆Server信息
我是不太愿意告诉别人我是使用什么Server的,但没有找到相关文献去隐藏它,所以我们可以混淆她,如把Server返回GFW之类的,吓唬吓唬那些脚本小子
 
 大部分情况下,脚本的小子的扫描工具是扫描我们response返回的header中的server信息.我们可以采用编译源码的方法来改变返回的Server,笔者的版本是nginx1.7.0,我们修改src/http/ngx_http_header_filter_module.c 中的48行
   static char ngx_http_server_string[] = "Server: nginx" CRLF;
   把其中的nginx改为我们自己想要的文字即可,笔者就改为了GFW. 笔者输出的Server:GFW.(这个前提是你进行了第一个步句的操作,关闭了版本号)
   
   如果你的版本号是开着的,你又想调戏下脚本小子.比如Server:billgate/1.9.0
  我们修改src/core/nginx.h 定位到13-14行
   #define NGINX_VERSION      "1.7.0"
   #define NGINX_VER          "nginx/" NGINX_VERSION
   Server返回的就是常量NGINX_VER, 我们把NGINX_VERSION大小定义为1.9.0,nginx改为billgate就能达到我们的目的了

三:url_fopen开启可能导致文件包含漏洞

php.ini 中的  allow_url_fopen设置为Off;      allow_url_include设置为Off

四:不安全的函数引用

1.不要使用mysql_escape_string,它已被弃用,请使用mysql_real_escape_string代替它。

/**

     * SQL指令安全过滤

     * @access public

     * @param string $str  SQL字符串

     * @return string

     */

    public function escapeString($str) {

        if($this->_linkID) {

            return mysql_real_escape_string($str,$this->_linkID);

        }else{

            return mysql_escape_string($str);

        }

    }

2.split() 替代方案
* 需要regex 的split, 可用preg_split() 代替
* 不需要regex, 只要要快速分割固定的字串, 可用explode() 代替. (速度会比需要regex 的快很多)

五:开放的重定向,跨站攻击

1.url白名单,对重定向路径进行验证

例:

//白名单配置
'LEGAL_URL' => array(
   'http://localhost/shenzhen',
   'shenzhen',
),

$legalUrls = C('LEGAL_URL');
$isLegal = false;
foreach($legalUrls as $legalUrl){
     if(strstr($tourl,$legalUrl)){
         $isLegal = true; break;
     }

}
if($isLegal){
    if (php_sapi_name() === 'cli') {
           @header('Location: '.$tourl);
} else {
            header('Location: '. $tourl);
}
}

六:SQL注入

1.对参数进行过滤

如:1.$fids = is_array($fids) ? array_unique(array_map( 'intval' , $fids)) : array_unique(array_map( 'intval' , explode(',', $fids)));

       2.$data ['table'] = $data ['table_name']   改为  $data ['table'] = preg_replace("/[^\w|,]/","",t($data ['table_name']));

      3.$map [$idField] = $data ['row_id'];   改为  $map [$idField] = intval($data ['row_id']);

七: 未设置cookie的httponly和secure属性。存在cookie被窃取和篡改的风险。

在PHP文件添加    ini_set("session.cookie_httponly", 1); //开启全局的httponly

八:越权操作(添加,修改,删除)

      可根据需求而定,对当前操作用户添加权限验证。

九: 泄露绝对路径

对绝对路径进行加密处理

© 著作权归作者所有

LauraOSC
粉丝 9
博文 10
码字总数 3213
作品 0
武汉
程序员
私信 提问
整理一些PHP开发安全问题

整理一些PHP开发安全问题   php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,近期需要总结一下以往的问题,在这里借翻译一篇文章同时加上自己开发的一些感触总结一下。 ...

开元中国2015
2015/07/06
392
0
wamp下php无法保存SESSION问题总汇

由于是在windows 下的iis进行php的环境,所以很多情况下不能像lamp那么简单进行设置。由于工作原因我也遇到很多session无法保存的情况(在wamp下)。以下是相信信息的汇总,仅供参考学习。 ...

阿夏
2013/07/11
2.4K
0
《PHP安全编程系列》系列分享专栏

PHP安全编程系列收藏夹收藏了有关PHP安全编程方面的知识,对PHP安全编程提供学习参考 《PHP安全编程系列》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201738...

kaixin_code
2018/11/06
24
0
多线程ThreadPoolExecutor的submit多线程处理一些结果汇总

1、问题介绍 项目中遇到一个棘手的问题,就是多线程处理一些结果。但是最后要获得每个线程运行的结果汇总。 2、解决思路 思路是这样子的,有一个主线程用来调用这些子线程。每个线程提交后,...

Oscarfff
2016/05/22
309
0
国外PHP学习网站书籍资料汇总

PHP网站 ——PHP相关的有帮助的网站 PHP The Right Way: 一个PHP实践的快速参考指导 PHP Best Practices: PHP最佳实践指导 PHP Weekly: 一个PHP新闻周刊 PHP Security: PHP安全方面的指导 PH...

stone_
2015/01/07
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
51分钟前
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部