如何解决就XSS攻击而言,在PHP中回显格式化的DateTime是否安全?
我有一个非常复杂的Web应用程序。我需要使用htmlspecialchars()函数清理发送到视图(MVC体系结构)的所有变量,以防止XSS攻击。由于我发送给视图的不仅仅是原始数据类型,因此我实现了一个函数,该函数将遍历变量数组,并根据变量的类型以不同的方式对每个变量进行清理(我正在使用gettype()来区分它。)
- 只需使用htmlspecialchars()即可对字符串,整数,布尔值和双精度数进行消毒
- null保持为空
- 通过递归程序逐项清除数组 我的自定义类的
- 对象具有自己的方法,该方法专门针对每个类进行清理
- DateTime-???
我的问题是,当我通过它们的format()方法回显它们的内容时,是否需要清理DateTime对象。可以将DateTime对象以某种方式误用于XSS攻击,还是认为它们是安全的?
我想我应该只将原始数据类型传递给视图,但是我也需要传递对象。
这是我使用的功能:
private function sanitize(array $data)
{
foreach ($data as $propertyName => $propertyValue)
{
if (gettype($propertyValue) === 'array')
{
//Sanitize each element of the array by recursion
$data[$propertyName] = $this->sanitize($data[$propertyName]);
}
else if (gettype($propertyValue) === 'NULL')
{
//NULL can stay NULL
continue;
}
else if ($propertyValue instanceof DatabaseItem)
{
//Sanitize instances of my custom class DatabaseItem
$propertyValue->sanitizeSelf();
}
else if ($propertyValue instanceof DateTime)
{
//TODO - is DateTime safe?
}
else
{
//boolean,integer,double,string
$data[$propertyName] = htmlspecialchars($propertyValue,ENT_QUOTES);
}
}
return $data;
}
解决方法
简短:是。 如果您的值不是日期,则只会导致错误:
<?php
$d=new DateTime (" <script> malicious </script>");
#test
echo $d->format("y");
/*will cause something like
Fatal error: Uncaught Exception: DateTime::__construct(): Failed to parse time string ( <script> malicious </script>)*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。