本文目录一览:
- 1、关于php面向对象的问题,求对框架原理了解的大神。
- 2、php调用js代码中的参数
- 3、修复php漏洞xss改那个文件
- 4、php下怎样防止XSS攻击
- 5、关于php调用文件及参数传递的问题
- 6、如何在php中修补XSS漏洞
关于php面向对象的问题,求对框架原理了解的大神。
自己设计框架学习意义远大于实用意义,设计的过程中可能会浪费你不少时间,而且你可能以后永远不会(99%)用到自己设计的框架,但是对你深入了解PHP还是很有帮助的。
(我自己也有在设计一个框架,如有兴趣,可以发给你一起研究)
大部分PHP MVC框架中心思想都是一样的:
首先要单文件入口(index.php),就是所有的访问都通过一个文件来控制,这样就能控制流程了。要实现这个功能就需要apache或者nginx的设置来配合了。以apache为例,最经典的.htacess:
IfModule mod_rewrite.c
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=$1 [QSA,L]
/IfModule
此文件的作用就是如果如果访问的文件或者文件夹存在的话就直接调用文件(用来处理访问/public/css, /public/js之类的请求),不然的话就将请求转发给index.php。此时index.php可以调用$_GET['_url'] 来获得请求。
#一般框架遵循的规则是:[地址]/[控制器名字]/[方法名字]/[参数/参数]
#请求: localhost/test/helloworld/china/shanghai
#在index.php里就可以访问$_GET['_url']来获得字符串:/test/helloworld/china/shanghai
然后将字符串explode()成array,根据默认规则获得以下信息(如果愿意可以自己写一个路由而不用默认方法解析路径)
控制器:test
方法:helloworld
参数:china, shanghai
先在test.php中:
class test
{
public function helloworld($country, $city)
{
echo 'Hello, I am from', $country, $city;
}
}
然后在index.php中:
#这里可以自己定义一个__autoload方法来让PHP自行require_once() class文件,就不用自己一个一个include()了。
#初始化一个控制器实例:
$test = new test();
#调用控制器中的方法,并递交参数
#请查阅PHP函数call_user_func_array()的使用方法
call_user_func_array( array($test, 'helloworld'), array('china','shanghai') );
这样就完成了一个简单的MVC框架,剩下的就是继续完善他,你可能需要学习以下知识:
PHP __autoload()的设计和命名空间(namespace)的设计
各种软件设计模式:singleton, dependency injection, lazy loading
OOP(面向对象编程)PHP类的继承模式(extends class), PHP接口(implements interface)
PHP数据库操作类: mysqli类, pdo类
HTTP请求,header中的各种参数设置
Web Programming的安全事项, 如xss防护
《代码简洁之道》,《PHP Zend Coding Style》
希望能帮助到你!
php调用js代码中的参数
JS是客户端脚本,PHP是服务器脚本,直接赋值给PHP变量,无法实现。
可以用script language=javascript
function a(obj)
{
n=obj.value;
window.location.href=" ***.php?q='+n+' ";
}
/script
?
$tmp= $_GET['q'];
echo $tmp;
?
修复php漏洞xss改那个文件
?php
$aa=$_GET['dd'];
echo $aa."123";//这里没有经过过滤就可以显示出来,导致的
?
过滤原理:
首先要想执行js脚本那就让html解析那些是js脚本,诸如:
script type="text/javascript"alert("这里会被js执行");/script
所以要过滤script标签和/script
或者过滤‘’和‘’这两个符号
实现:
?php
$aa=$_GET['dd'];
$aa=str_replace('','lt;',$aa);
$aa=str_replace('','gt;',$aa);//以上两句是直接过滤''和''缺点其他便签不能用
/*定向过滤script*/
/*
$aa=str_replace('script','lt;scriptgt;',$aa);
$aa=str_replace('/script','lt;/scriptgt;',$aa);
*/
echo $aa."123";//这里没有经过过滤就可以显示出来,导致的
?
总的来说就是过滤些"非法"标签
php下怎样防止XSS攻击
在PHP中修补XSS漏洞,我们可以使用三个PHP函数。
这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的""与""符号转换成"" 与"gt;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。
PHP Code:
?
// 这里的代码主要用于展示这两个函数之间输出的不同
$input = 'scriptalert(1);/script';
echo htmlspecialchars($input) . 'br /';
echo htmlentities($input);
?
htmlentities()的另一个例子
PHP Code:
?php
$str = "A 'quote' is bbold/b";
echo htmlentities($str);
echo htmlentities($str, ENT_QUOTES);
?
第一个显示: A 'quote' is bbold/b
第二个显示:A 'quote' is bbold/b
htmlspecialchars()使用实例
PHP Code:
?php
$new = htmlspecialchars("a href='test'Test/a", ENT_QUOTES);
echo $new;
?
显示: a href='test'Test/a
strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:i, b 或p.
strip_tags()使用实例
PHP Code:
?php
$text = 'pTest paragraph./p!-- Comment -- Other text';
echo strip_tags($text);
echo "\n";
// allow p
echo strip_tags($text, 'p');
?
现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。
首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下:
PHP Code:
function search($query, $page)
{
global $db, $bgcolor2, $bgcolor4, $sitename, $io_db, $module_url, $list_page_items, $hm_index;
$option = trim($option);
$query = trim($query);
$query = FixQuotes(nl2br(filter_text($query)));
$db-escape_string($query);
$db-escape_string($option);
alpha_search($query);
...
在这种情况下,我们通过使用$query这一值作为变量,然后使用htmlentities()这一函数:
PHP Code:
$query = FixQuotes(nl2br(filter_text(htmlentities($query))));
如果你对这三种函数还有有疑问可以使用PHP手册来查看:
关于php调用文件及参数传递的问题
require相当于把指定文件的代码换到当前位置,例如
//a.php
$a=1;
$b=2;
//b.php
$c=3;
require_once('a.php');
$d=4;
在执行b.php时,相当于b.php内容如下
$c=3;//b.php中原内容
$a=1;//a.php中的内容
$b=2;//a.php中的内容
$d=4;//b.php中原内容
就是替换的关系,所以变量是通用的,不需要任何传值,可以理解为2个文件合并到一起
建议用require_once以防止多次循环引用出错
如何在php中修补XSS漏洞
你好,如果要修补xss漏洞,通用的一个做法是使用htmlspecialchars()函数。
使用该函数大概可以预防90%左右的xss左右的攻击,避免你的PHP程序受到攻击。