register_globals,是php.ini文件里面的一个配置选项,接下来,我们可以通过例程来分析一下,当register_globals = on 与 register_globals = off 的时候,对php语言的一些安全影响. 测试源代码如下: index.html 源代码: <form method="post" action="index.php"> <table> <tr> <td>用户名:<…
如果你还能记起早期Web应用开发中使用C开发CGI程序的话,一定会对繁琐的表单处理深有体会.当PHP的register_globals配置选项打开时,复杂的原始表单处理不复存在,公用变量会自动建立.它让PHP编程变得容易和方便,但同时也带来了安全隐患. 用户输入从何而来?第一个源是 GET.POST 和 COOKIE 数据.一般称为 GPC 数据.此数据的可识别程序依赖于一个有争议的 php.ini设置:register_globals.在 PHP V4.3.0 以后,register_glob…
1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏洞利用代码. 然而,在不同的PHP版本中配置指令也有不一样的地方,新版可能会增加或者删除部分指令,改变指令默认设置或者固定设置指令,才能高效地挖掘到高质量的漏洞. PHP_IN_*常量的定义 常量 含义 PHP_IN_USER  该配置选项可在用户的PHP脚本或windows注册表中设置 PHP_I…
对于php代码审计我也是从0开始学的,对学习过程进行整理输出沉淀如有不足欢迎提出共勉.对学习能力有较高要求,整个系列主要是在工作中快速精通php代码审计,整个学习周期5天 ,建议花一天时间熟悉php语法. 我是直接phpstudy2019一键搭建小白首选 所谓工欲善其事必先利其器,找一款适合自己的php开发工具自行百度搭建,我用的是phpstrom . 初级篇主要讲 1. php历史版本漏洞. 2. 变量配置缺陷. 3. 函数缺陷. 4. 弱语言缺陷. PHP配置漏洞 我们要熟知php各版本漏洞…
php核心配置 register_globals 全局变量注册开关 设置为on时,把GET/POST的变量注册成全局变量 PHP 5.4.0中移除 allow_url_include 包含远程文件 设置为on时,可包含远程文件 PHP 5.2后默认为off allow_url_fopen 打开远程文件     magic_quotes_gpc 魔术引号自动过滤 设置为on时,自动在GET/POST/COOKIE变量中',",\,NULL的前面加上\ PHP5不会过滤$_SERVER变量,PHP5…
1.register_globals(全局变量注册开关) 2.magic_quotes_gpc(魔术引号开关) 3.magic_quotes_runtime(魔术引号开关) 4.magic_quotes_sybase(魔术引号开关) 5.disable_functions(禁用php函数) 6.safe_mode(php安全模式) 7.display_errors & error_reporting(php调试安全)…
1.php.ini基本配置-语法 大小写敏感directive = value(指令=值)foo=bar 不等于 FOO=bar 运算符| & - ! 空值的表达方法foo =     ;foo = none;foo = "none"; 2.基本配置 安全模式safe_mode = on (安全模式,用来限制文档的存取,限制环境变量的存取,控制外部程序的执行,如果为空或者关闭即远程代码执行,但是这个特性在php5.4.0被移除了) 限制环境变量存取safe_mode_allow…
php核心配置 php.ini 基本配置 语法 大小写敏感 运算符 空值的表达式 安全模式 安全模式 safe_mode = off 用来限制文档的存取,限制环境变量的存取,控制外部程序的执行.PHP5.4.0移除 限制环境变量存取 safe_mode_allowed_env_vars = string 指定php程序可以改变的环境变量的前缀,当这个选项的值为空时,那么php可以改变任何环境变量,如果 如:safe_mode_allowed_env_vars = PHP_,当这个选项的值为空时,…
Lua5.3 注册表 _G _ENV 来源:http://blog.csdn.net/murisly/article/details/46518551 注册表的描述,借用PIL中的一段话: registry 一直位于一个由 LUA_REGISTRYINDEX 定义的值所对应的假索引(pseudo-index)的位置.一个假索引除了他对应的值不在栈中之外,其他都类似于栈中的索引.Lua API 中大部分接受索引作为参数的函数,也都可以接受假索引作为参数-除了那些操作栈本身的函数,比如 lua_re…
Part 1, 问题: webpack + vue2.0框架中,如何在入口js中注册组件? 就是在一个月以前,匆匆闯入vuejs这个社群,基本了解了vuejs的一些基础特性和语法.笔者兴致勃勃地开始想用vuejs写个单页面应用出来.兜兜转转地开始使用vue-router这个插件,阅读了vue-router前两个事例之后,发现了一个问题. 通过webpack导入.vue的组件文件的时候,弹出问题: [vue warn]: Failed to mount component:template or…
PHP核心配置 原为引用 <代码审计企业级web代码安全架构>尹毅  第一章内容 Register_globals(全局变量开关) 会直接把用户GET.POST等方式提交上来的参数注册成为全局变量并初始化值为参数对应的值. PHP5.3.0起废弃.PHP5.4.0移除 Allow_url_include(是否允许包含远程文件) 可以直接包含远程文件, Magic_quotes_gpc(魔术引号自动过滤) 会自动在GET.POST.COOKIE变量中 单引号.双引号.反斜杠.空字符的前面加上反斜…
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行. 防止SQL注入: 1.开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置 2.执行sql语句时使用addslashes进行sql语句转换 3.Sql语句书写尽量不要省略小引号和单引号 4.过滤掉sql语句中的一些关键字:update.insert.delete.select.* 5.提高数据库表和字段…
Linux下的Apache和PHP安全设置 PHP安全模式开启,PHP5.3将不再有安全模式. (1) safe_mode:以安全模式运行php; 在php.ini文件中使用如下 safe_mode = On (使用安全模式) safe_mode = Off (关闭安全模式) 在apache的httpd.conf中VirtualHost的相应设置方法 php_admin_flag safe_mode On (使用安全模式) php_admin_flag safe_mode Off (关闭安全模式…
关于脚本安全这个话题好像永远没完没了,如果你经常到国外的各种各样的bugtraq上,你会发现有一半以上都和脚本相关,诸如SQL injection,XSS,Path Disclosure,Remote commands execution这样的字眼比比皆是,我们看了之后的用途难道仅仅是抓肉鸡?对于我们想做web安全的人来说,最好就是拿来学习,可是万物抓根源,我们 要的不是鱼而是渔.在国内,各种各样的php程序1.0版,2.0版像雨后春笋一样的冒出来,可是,大家关注的都是一些著名的cms,论坛,b…
17.isset.empty.is_null的区别 isset 判断变量是否定义或者是否为空 变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false 变量赋值为null,返回false empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false. "",0,"0",NULL,FALSE都认为为空,返回true 没有任何属性的对象都认为是空 is_null:检测传入的值(值.变…
PHP面试基础题目 1.双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字.字母.下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\ 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断) 2.常用的超全局变量(…
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行. 防止SQL注入: 1.开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置 2.执行sql语句时使用addslashes进行sql语句转换 3.Sql语句书写尽量不要省略小引号和单引号 4.过滤掉sql语句中的一些关键字:update.insert.delete.select.* 5.提高数据库表和字段…
Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发.5.6之前默认myisam 2.innodb是支持事务的存储引擎.支持行级锁以及外键,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发. 数据表类型有哪些 答:MyISAM.InnoDB.HEAP.BOB,ARCHIVE,CSV等.       MyISAM:成熟.稳定.易于管理,快…
Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发. 2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发. 数据表类型有哪些 答:MyISAM.InnoDB.HEAP.BOB,ARCHIVE,CSV等.        MyISAM:成熟.稳定.易于管理,快速读取.一些功能不支持(事务等),表级锁.…
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数,import_request_variables()使用不当,开启了全局变量注册等.  0×01 全局变量覆盖 register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它. 代码示例1: <…
1. 如何设计一个高并发的系统 ① 数据库的优化,包括合理的事务隔离级别.SQL语句优化.索引的优化 ② 使用缓存,尽量减少数据库 IO ③ 分布式数据库.分布式缓存 ④ 服务器的负载均衡 2. 锁的优化策略 ① 读写分离 ② 分段加锁 ③ 减少锁持有的时间 ④ 多个线程尽量以相同的顺序去获取资源 等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁.这部分跟面试官谈了很久 3. 索引的底层实现原理和优化 B+树,…
我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击.如果代码使用存储过程,而这些存储过程作…
顶80SEC的牛. 深掘XSS漏洞场景之XSS Rootkit[完整修订版] EMail: rayh4c#80sec.com Site: http://www.80sec.com Date: 2011-10-15 0×00 前言 众所周知XSS漏洞的风险定义一直比较模糊,XSS漏洞属于高危漏洞还是低风险漏洞一直以来都有所争议.XSS漏洞类型主要分为持久型和非持久型两种: 1. 非持久型XSS漏洞一般存在于URL参数中,需要访问黑客构造好的特定URL才能触发漏洞. 2. 持久型XSS漏洞一般存在于…
17.isset.empty.is_null的区别 isset 判断变量是否定义或者是否为空 变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false 变量赋值为null,返回false empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false. "",0,"0",NULL,FALSE都认为为空,返回true 没有任何属性的对象都认为是空 is_null:检测传入的值(值.变…
1.isset.empty.is_null的区别 isset 判断变量是否定义或者是否为空 变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false 变量赋值为null,返回false empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false. "",0,"0",NULL,FALSE都认为为空,返回true 没有任何属性的对象都认为是空 is_null:检测传入的值(值.变量…
1.Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发. 2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发. 2.数据表类型有哪些 答:MyISAM.InnoDB.HEAP.BOB,ARCHIVE,CSV等.       MyISAM:成熟.稳定.易于管理,快速读取.一些功能不支持(事务等),表级…
1.双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字.字母.下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\ 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断) 2.常用的超全局变量(8个) $_GET…
0x00 简介 最近这几天看到了许多关于代码审计的ctf题,在电脑里也翻出来好长时间没看过的php_bugs,干脆最近把这个好好看看! 下载地址:https://github.com/bowu678/php_bugs 0x01 变量覆盖 1.1 extract() 该函数使用数组键名作为变量名,使用数组键值作为变量值.针对数组中的每个元素,将在当前符号表中创建对应的一个变量.条件:若有EXTR_SKIP则不行. 一个简单的变量覆盖的例子: <?php $a = 1; //原变量值为1 $b =…
1.解释mvc (1)mvc即 模型model,视图view,控制器controller:是一种模型,是一种编程思想,就是把一个应用的输入.输出.数据处理分开,分解耦合(2)A..视图,数据采集和处理,和用户请求,不包括业务流程,smarty实现B.模型,接收数据和请求,完成相关数据处理,返回数据,’黑箱‘操作,核心,php类库实现C.控制器,任务的实现,根据传入数据调用各种组件完成任务,将结果传给视图显示,业务流程的实现.(3)mvc的优点:使开发人员只关注某一层,很容易用新代替旧层次的实现,…
我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击.如果代码使用存储过程,而这些存储过程作…