0

我正在使用 Javascript 作为中间人从 HTML 向 PHP 发送数据。我想检查一个字符串是否在 Javascript 和 PHP 中包含 ' 因为它会阻止我的 sql 命令工作。我已经尝试了下面的代码,但它不起作用。我该怎么做呢?

function CheckQuestionAnswerField($value) {
    $isQAValid = true;

    if($value == "")
        $isQAValid = false;
    if($value == null)
        $isQAValid = false;
    for($LCV=0; $LCV<(count($value)-1); $LCV++) {
        if($value[$LCV] == "'")
            $isQAValid = false;
    }

    return $isQAValid;
}

在上面的代码中 $value 是字符串。如果从函数返回 false,那么我会显示警报。此函数适用于前两个 if 语句,但是,这不适用于 for 循环。问题是什么?

我也想知道如何在 Javascript 中做到这一点。

我还想知道这些实现是否可以检测到“.


编辑-1

我用下面的代码尝试了 strpos 仍然无法正常工作

function CheckQuestionAnswerField($value) {
    $isQAValid = true;

    if($value == "")
        $isQAValid = false;
    if($value == null)
        $isQAValid = false;
    if (strpos($value,"'") == true)
        $isQAValid = false;
    if (strpos($value,'"') !== false)
        $isQAValid = false;

    return $isQAValid;
}

它现在说的一切都是假的。

4

3 回答 3

2

在 JavaScript 中你会使用indexOf

if (-1 !== value.indexOf("'"))
{

}

在 PHP 中你会使用strpos

if (FALSE !== strpos($value, "'"))
{

}

但是,如果您切换到使用准备好的语句,则不需要这个:请参阅PDO.

于 2013-03-06T20:14:39.173 回答
1

绝对逃避您在后端的查询。如果你不这样做,这是一个巨大的安全漏洞。

这个函数是旧的方法(参考了替代方法): http: //php.net/manual/en/function.mysql-real-escape-string.php

我也会考虑htmlentities()在用户提交的数据上使用。

于 2013-03-06T20:14:48.247 回答
-1

首先,您不想只检查该字符是否存在并使该值无效-您应该转义所有查询,以便该值的存在与执行查询无关。然后,如果您出于其他原因仍想禁止此字符,则可以这样做。

其次,您可以使用一次检查empty()来检查""null

最后,没有理由循环字符串,您可以使用它来查找字符是否出现 -如果不strpos出现,它将返回。false

function CheckQuestionAnswerField($value) {
    $isQAValid = true;

    if(empty($value) {
       $isQAValid = false;
    } else if ( strpos($value, "'") !== false) {
      $isQAValid = false;
    }

    return $isQAValid;
}
于 2013-03-06T20:14:47.050 回答