1

我正在创建一个比这个小部分更高级的验证脚本,我只是打印我遇到问题的特定部分。

该脚本简单地接收一个带有设置列表的一维数组,执行所需的测试并输出一个带有所需字符串的多维数组,所有这些都干净整洁。

由于某种原因,这些trim() strip_tags() strip_html_tags()功能正在工作但同时失败。我的意思是字符串通过函数传递并显示为干净,但内置的 PHP 函数没有按预期工作。

问题是内置函数是否只适用于直接输出给用户的文本,或者这些函数是否应该在输出前工作,即输出而不是存储在数据库中?

我希望将所有脚本标签剥离为用户输入,因此我只有纯文本。

我想在每个语句中使用一个 switch,我下面的函数是 switch 语句的片段。

我试图使用的东西不能按预期工作。

function check_input1($input)
{
    if(trim($input))
    {
        $cleaninput[$i][$input] = 'CLEAN';
    }else
        $cleaninput[$i][$input] = 'DIRTY';
}


function check_input2($input)
{
    if(strip_tags($input))
    {
       $cleaninput[$i][$input] = 'CLEAN';
    }else
       $cleaninput[$i][$input] = 'DIRTY';
}



function check_input3($input)
{
    if(strip_html_tags($input))
    {
       $cleaninput[$i][$input] = 'CLEAN';
    }else
       $cleaninput[$i][$input] = 'DIRTY';
}

我所知道的可以直接在 html 元素中输出。

strip_tags(trim($key))
strip_tags(trim($value))
4

2 回答 2

0

问题是内置函数是否只适用于直接输出给用户的文本,或者这些函数是否应该在输出前工作,即输出而不是存储在数据库中?

有问题的函数适用于任何字符串。发往数据库的字符串与发往 stdout 的字符串没有区别。

您的问题是您似乎期望函数返回真/假,作为某种迹象表明他们找到了要剥离的东西。他们不是这样工作的。他们返回修改后的字符串。每个if条件都将进入该CLEAN部分(假设其函数不返回""),并默默地丢弃函数返回的已清理字符串。

你想要的是这样的:

function check_input3($input)
{
    $output = strip_html_tags($input);

    if ($output == $input) {
        // strip_html_tags didn't remove anything
        $cleaninput[$i][$input] = 'CLEAN';
    } else {
        // variables differ, so strip_html_tags found something to remove
        $cleaninput[$i][$input] = 'DIRTY';
    }
}
于 2012-09-21T04:06:57.183 回答
0

对于其他参考,您可能需要考虑由 OWASP 代码资助的用于输入验证的 inspekt php4 和 5 框架。google.com/p/inspekt/wiki/DocsAndSupport 提供了输入和输出之间的防火墙类型场景......这里有一个很好的小教程codediesel.com/php/data-filtering-and-validation-using-inspekt

于 2012-09-21T18:05:59.843 回答