首页 » 网站推广 » ent_quotesphp技巧_PHP安然编程建议

ent_quotesphp技巧_PHP安然编程建议

访客 2024-12-12 0

扫一扫用手机浏览

文章目录 [+]

背景

为了确保你的 web 内容安全,这里有一些常规的安全准则:

ent_quotesphp技巧_PHP安然编程建议

别相信表单

ent_quotesphp技巧_PHP安然编程建议
(图片来自网络侵删)

攻击表单很大略。
通过利用一个大略的 JavaScript 技巧,你可以限定你的表单只许可在评分域中填写 1 到 5 的数字。
如果有人关闭了他们浏览器的 JavaScript 功能或者提交自定义的表单数据,你客户真个验证就失落败了。

用户紧张通过表单参数和你的脚本交互,因此他们是最大的安全风险。
你该当学到什么呢?在 PHP 脚本中,总是要验证 通报给任何 PHP 脚本的数据。
在本文中,我们向你演示了如何剖析和戒备跨站脚本(XSS)攻击,它可能会挟制用户凭据(乃至更严重)。
你也会看到如何防止会玷污或毁坏你数据的 MySQL 注入攻击。

别相信用户

假定你网站获取的每一份数据都充满了有害的代码。
清理每一部分,即便你相信没有人会考试测验攻击你的站点。

关闭全局变量

你可能会有的最大安全漏洞是启用了 register_globals 配置参数。
幸运的是,PHP 4.2 及往后版本默认关闭了这个配置。
如果打开了register_globals,你可以在你的 php.ini 文件中通过改变 register_globals 变量为 Off 关闭该功能:

register_globals = Off

新伎俩式员以为注册全局变量很方便,但他们不会意识到这个设置有多么危险。
一个启用了全局变量的做事器会自动为全局变量赋任何形式的参数。
为了理解它如何事情以及为什么有危险,让我们来看一个例子。

假设你有一个称为 process.php 的脚本,它会向你的数据库插入表单数据。
初始的表单像下面这样:

name=\"大众username\公众 type=\公众text\"大众 size=\公众15\"大众 maxlength=\公众64\"大众>

运行 process.php 的时候,启用了注册全局变量的 PHP 会将该参数赋值到 $username 变量。
这会比通过 $_POST['username'] 或$_GET['username'] 访问它节省击键次数。
不幸的是,这也会给你留下安全问题,由于 PHP 会设置该变量的值为通过 GET 或 POST 的参数发送到脚本的任何值,如果你没有显示地初始化该变量并且你不肯望任何人去操作它,这就会有一个大问题。

看下面的脚本,如果 $authorized 变量的值为 true,它会给用户显示通过验证的数据。
正常情形下,只有当用户精确通过了这个假想的 authenticated_user() 函数验证,$authorized 变量的值才会被设置为真。
但是如果你启用了 register_globals,任何人都可以发送一个 GET 参数,例如 authorized=1 去覆盖它:

php

// Define $authorized = true only if user is authenticated

if (authenticated_user()) {

$authorized = true;

}

?>

这个故事的寓意是,你该当从预定义的做事器变量中获取表单数据。
所有通过 post 表单通报到你 web 页面的数据都会自动保存到一个称为 $_POST 的大数组中,所有的 GET 数据都保存在 $_GET 大数组中。
文件上传信息保存在一个称为 $_FILES 的分外数据中。
其余,还有一个称为 $_REQUEST 的复合变量。

除此之外,

PHP 转义实现

把输出渲染成网页或API相应时,一定要转义输出,这也是一种防护方法,能避免渲染恶意代码,造成XSS攻击,还能防止运用的用户无意中实行恶意代码。

我们可以利用前面提到的htmlentities函数转移输出,该函数的第二个参数一定要利用ENT_QUOTES,让这个函数转义单引号和双引号,而且,还要在第三个参数中指定得当的字符编码(常日是UTF-8),下面的例子演示了如何在渲染前转义HTML输出:

';echo htmlentities($output, ENT_QUOTES, ‘UTF-8');

如果不转义直接输出,会弹出提示框:

转义之后输出变成:

当代PHP支持许多模板引擎,这些模板引擎在底层已经为了做好了转义处理,比如现在盛行的twig/twig和smarty/smarty都会自动转义输出。
这种默认处理办法很赞,为PHP Web运用供应了有力的安全保障。

Blade 模板引擎避免XSS攻击事理

Laravel利用的模板引擎是Blade,关于Blade的利用可以参考其官方文档,这里我们大略磋商下Laravel底层如何对输出进行转义处理。

一样平常我们在Laravel中返回视图内容会这么做:

return view(’test’, [‘data’=>$data]);

这是一个很大略的例子,意味着我们会在resources/views目录下找到test.blade.php视图文件,然后将$data变量传入个中,并将终极渲染结果作为相应的内容返回给用户。
那么这一过程经历了哪些底层源码的处理,如果$data变量中包含脚本代码(如JavaScript脚本),又该怎么去处理呢?接下来我们让来一窥究竟。

首先我们从赞助函数view入手,当然这里我们也可以利用View:make,但是大略起见,我们一样平常用view函数,该函数定义在Illuminate\Foundation\helpers.php文件中:

function view($view = null, $data = [], $mergeData = []){ $factory = app(ViewFactory::class); if (func_num_args() === 0) { return $factory; } return $factory->make($view, $data, $mergeData);}

一.在web页面嵌入PHP代码的几种风格

推举利用标准风格或简短风格

.代码如下:

<?php

//标准风格

echo 'Hello World!';

?>

<?

//简短风格

echo 'Hello World!';

?>

<script language=\公众php\"大众>

//script风格

echo 'Hello World!';

</script>

二.代码注释的四种办法

.代码如下:

<?php

//单行注释

/

多行注释

/

#shell风格注释

/

PHPdoc风格注释

/

?>

标签:

相关文章