2024年波兰PHPC

用户提交的数据

许多人中最大的弱点菲律宾比索程序不是语言本身,但仅仅是一个没有使用的代码问题安全意识。因此,你应该时时刻刻考虑给定代码的含义,确定如果向其提交意外变量,则可能造成的损坏。

示例#1危险变量用法

<?php(电话)
//从用户的主目录中删除文件。。。或者也许
//其他人的?
取消链接($evil_var(美元));

//写入访问日志。。。或者是/etc/passwd条目?
写入文件(每秒$fp,$evil_var(美元));

//执行一些琐事。。还是rm-rf?
系统($evil_var(V));
执行官($evil_var(美元));

?>

您应该始终仔细检查代码,以确保从web浏览器提交的变量正确检查,并问自己以下问题:

  • 这个脚本只会影响预期的文件吗?
  • 是否可以对异常或不良数据采取行动?
  • 这个脚本能以非预期的方式使用吗?
  • 这可以与其他脚本一起使用吗态度?
  • 是否会充分记录任何事务?

通过在编写脚本时充分提问这些问题,而不是稍后,当你需要提高您的安全性。从这种心态开始,您不能保证系统的安全,但您可以提供帮助改进它。

您可能还想考虑关闭register_globals,magic_quotes或其他可能混淆的便利设置您可以了解给定变量的有效性、来源或值。使用菲律宾比索在error_reporting(E_ALL)模式下也可以帮助发出警告您了解在检查变量之前使用的变量,或者初始化(这样可以防止异常数据操作)。

添加注释

用户贡献的笔记2条注释

乌利·库斯特尔
18年前
在这里的文档中,我要重复的一件事是,什么信息实际上来自用户。许多人认为Cookie是安全的,因为它是由PHP编写的。但事实是,它存储在用户的计算机上,通过用户的浏览器传输,因此很容易操作。

因此,在这里再次提到:

URL中的CGI参数、HTTP POST数据和cookie变量被视为“用户数据”,因此需要进行验证。会话数据和SQL数据库内容只有在来自不可信的来源(如刚刚提到的来源)时才需要验证。

这不是什么新鲜事,但我本以为这条信息会出现在这个标题下,至少是作为一个简短的回顾加上对实际文档的补充。
石山Livingstone[点]com
16年前
确保您的表单是从页面提交的!也可以通过向查询字符串中添加&token并使用$_GET根据会话数据(或您喜欢的数组)进行检查来适应url,而不是随机生成和存储此字符串。如果您愿意,如果不想使用$_SESSION,可以构建自己的数组来存储生成的字符串,比如您可以将自己的数组设置为$tokens=array(),然后在easysecure类中,将所有内容存储在该数组中!

<?php(电话)

容易治愈{

无功功率,无功功率
$curr_user(当前用户);
无功功率,无功功率
$当前许可;
无功功率,无功功率
$当前任务;
无功功率,无功功率
$有效权限;
无功功率,无功功率
$错误;


功能&
设置变量($名称,价值$=无效的) {
如果(!
完整(_N)(价值$)) {
$这个->$名称=价值$;
}
返回
$这个->$名称;
}

功能
制造代币($表单名,$id(美元)){

$代币=md5型(uniqid公司(兰特(),真的));

$_主题[$表单名.$id美元] =$代币;

返回
$代币;
}

功能
支票代币($代币,$表单名,$id(美元)){
//打印_($_SESSION);
//echo($token);
//如果我们没有有效的令牌,则返回invalid;
如果(!$代币){
$这个->设置变量('有效权限',0);
$这个->设置变量('错误','未找到令牌,检测到安全桥接');
返回
;
}

//如果我们有一个有效的令牌检查
$键=$_主题[$表单名.$id(美元)];
如果(
$键!==$代币){
$这个->设置变量('有效权限',0);
$这个->设置变量('错误','无效标记');
返回
;
}

如果(
$这个->有效许可!==1){
回声
'运行此脚本的权限无效';
返回
;
}其他{
返回
真的;
}
}

}

?>

<?php$用户ID= ***//你喜欢什么就做什么?>
<form name=“newform”action=“index.php”method=“post”>
<input type=“text”name=“potentialeveliefield”value=“”size 30/>
<input type=“hidden”name=“token”value=“<?php(电话)回声代币(新概念,$用户ID);//此处的$userid可能是用户配置文件id?>" />
<输入类型=“提交”/>
</form>

现在,在处理表单时……检查令牌的值

<?php(电话)

//你知道表格名称
如果(!支票代币($_POST(发送)['令牌'],'新表单',$用户ID))
{
//失败
退出();//或者什么样的终止和通知方式最适合你。
//您还可以按照自己的方式设计类,以获得更准确的fail(来自var的错误消息)
}

//现在可以继续输入数据清理(验证)

?>
到顶部