Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和Ajax字符串输入/输出处理场景_Php_Ajax_String_Validation_Html Entities - Fatal编程技术网

PHP和Ajax字符串输入/输出处理场景

PHP和Ajax字符串输入/输出处理场景,php,ajax,string,validation,html-entities,Php,Ajax,String,Validation,Html Entities,我还不熟悉PHP中的字符串处理。下面是我目前正在做的事情的示意图。最后,我希望得到一种通用的方法来处理以下场景中的字符串。注意,在这个场景中,文本往往是大量的数学符号和代码语法 字符串和整数是通过基于HTML的标准表单输入的(我忘了在图表中提到这一点) 步骤A当前使用:mysql\u real\u escape\u字符串(输入) 步骤B目前使用: htmlentities($string2) $string1 整数是零 问题: 关于MySQL注入,MySQL\u real\u escape\

我还不熟悉PHP中的字符串处理。下面是我目前正在做的事情的示意图。最后,我希望得到一种通用的方法来处理以下场景中的字符串。注意,在这个场景中,文本往往是大量的数学符号和代码语法

字符串和整数是通过基于HTML的标准表单输入的(我忘了在图表中提到这一点)

步骤A当前使用:
mysql\u real\u escape\u字符串(输入)

步骤B目前使用:

  • htmlentities($string2)
  • $string1
  • 整数是零
问题:

  • 关于MySQL注入,MySQL\u real\u escape\u字符串是否足以防止这种情况
  • 我仍然需要完成String1的输出处理。请注意文本实际上是如何在两个不同的位置使用的:HTML和Canvas。步骤B中的htmlentities会使代码语法正确地出现在HTML5画布上,但不会出现在HTML中。反之亦然(HTML语法会破坏页面)。是否有与PHP的Htmlenties相同的JavaScript函数
  • 应验证int表单以确保它是int
  • 当我使用这个不是标准减号字符('-')的字符('-')时,String2将“null”输出到HTML
  • 魔法引号已关闭。但是,如果我在启用了它的服务器上运行脚本,我需要一个简短的脚本:if(magic quotes已启用){关闭magic quotes}
  • 关于表单验证,我忘记了什么
  • 如果我的方法完全错误,请纠正我的错误,并帮助我一劳永逸地解决这个问题。如果您认为有帮助,可以用A、B、C、D和E来描述您的解决方案。提前谢谢

  • -
  • -
  • 使用
    htmlspecialchars
    ,不必使用htmlspecialchars。您得到的是NULL,因为您可能有字符集问题
  • 如果您看到启用了magic quotes,那么已经太晚了,需要手动反转Quote
  • 我还是不明白我想做什么

  • mysql\u real\u escape\u string()
    将正确地转义您的代码
  • (A) 在JavaScript端,jQuery的
    .text()
    方法将在将代码输出到页面之前正确地转义代码。(B) 查看PHP.js。它是一个复制PHP功能的JavaScript库,包括
    htmlentities()
    htmlspecialchars()
  • 对于整数,您可以使用
    ctype\u digits()
    函数来确保它是一个数值;您还可以使用某种形式的类型暗示:
    $int=(int)$int
  • 我同意那位先生的建议,他建议尝试
    htmlspecialchars()
  • 尽量避免使用魔术语录。这是一个可怕的特性,将在PHP的未来版本中删除。如果您需要包含针对魔法引号的保护,请尝试类似于下面代码的内容(见文章底部)
  • 很难说没有看到你的代码,但是看起来你走的是对的
  • -

    1) 不确定这是否足够,但您也可以尝试使用预处理语句(PDO),如果您在同一脚本中多次使用某些查询,这将保证完整的sql注入保护+小的性能提升

    3) 只需转换为int-(int)$string

    5) 哇,那一定是一些过时的服务器

    我觉得你在安全方面反应过度了。
    如果您确实需要安全保护,请在与数据库交谈时使用准备好的语句,并使用某种HTML净化器(如下图:)来清理HTML输出(防止XSS)

    1)在内部保持字符串“原始”。2) 转义字符串的正确使用。还有,我不得不恭敬地不同意你关于安全的声明。我不认为约翰做得过火,因为他所列的一切都不是真正的不同寻常。安全应当是发展进程的一个组成部分;有些人错误地将安全性视为一项功能。我的意思是他反应过度,认为如何保护每一个可能的层(这是我从图纸中推断出来的),而只保护数据库输入和html输出(防御XSS)就足够了。
    if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
        $func = function(&$val, $key) {
            if (!is_numeric($val)) {
                $val = stripslashes($val);
            }
        };
    
        array_walk_recursive($_GET, $func);
        array_walk_recursive($_POST, $func);
        array_walk_recursive($_COOKIE, $func);
    
        unset($func);
    }