2011-07-01 52 views
2

我还是PHP中字符串处理的新手。下面是我目前正在做的事情的图表。最终,我想在下面的场景中获得处理字符串的通用方法。请注意,在这种情况下,文本往往是很多数学符号和代码语法。PHP和Ajax字符串输入/输出处理场景

字符串和整数通过标准的基于HTML的表单输入(我忘了在图中提及)。

步骤A当前使用:mysql_real_escape_string(input);

步骤B当前使用:

没有为 $string1
  • 没有为整数
    • htmlentities($string2)

    问题:

    1. 关于MySQL注入,mysql_real_escape_string是否足以防范这种情况?
    2. 我仍然需要完成处理String1的输出。请注意文本在两个不同的位置实际使用的方式:HTML 画布。步骤B中的htmlentities将使代码语法在HTML5 Canvas中正确显示,但不在HTML中显示。反之亦然(HTML语法打破了页面)。是否有一个与PHP的htmlentities相同的JavaScript函数?
    3. int形式应该被验证以确保它是一个int。
    4. 当我使用这个字符(' - ')时,String2向HTML输出“null”,这是而不是标准减号字符(' - ')。
    5. Magic Quotes已关闭。但是,如果我在启用它的服务器上运行该脚本,则需要一个简短的脚本:IF(启用魔术引号){关闭魔术引号}。
    6. 我在表单验证方面忘了什么?

    如果我的方法是完全错误的,那就直接给我一下,帮助我彻底解决这个问题。如果您认为有帮助,您可以用A,B,C,D和E来描述您的解决方案。提前致谢。

    String Processing Diagram

  • +0

    1)保持串“原始”内部。 2)为了适当的使用,准确地逃离琴弦。另见[see here](http://stackoverflow.com/questions/6475225/how-to-cleanse-a-string-to-avoid-sql-injection-and-the-most-common-types-of-attac/ 6475262#6475262)。 –

    回答

    1
    1. mysql_real_escape_string()会妥善逃不出你的代码
    2. (A)在JavaScript的结束,jQuery的.text()方法正确将其输出到页面之前逃脱代码。 (B)检查PHP.js.它是一个复制PHP功能的JavaScript库,包括htmlentities()htmlspecialchars()http://phpjs.org/
    3. 至于整数,你可以使用ctype_digits()函数来确保它是一个数值;你也可以使用某种形式的提示:$int = (int) $int;
    4. 我同意绅士谁推荐尝试htmlspecialchars()
    5. 尝试关闭魔术引号。这是一个可怕的功能,并将在未来的PHP版本中被删除。如果您需要包含对魔法引号的保护,请尝试类似下面的代码。 (见帖子底部)
    6. 很难说没有看到你的代码,但似乎你是在正确的轨道上。

    -

    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); 
    } 
    
    0
    1. -
    2. -
    3. 使用htmlspecialchars,ヶ辆是不是necessay。你得到一个NULL,因为你可能有一个字符集问题。
    4. 如果您看到已启用魔术引号,则已经太晚并且需要手动取消引用。

    我还是不明白想做什么。

    0

    1)不知道它是否够,但你也可以尝试使用预处理语句(PDO),如果你使用一些这保证了完整的SQL注入防护+小性能比较升压在同一个脚本中不止一次quesries。

    3)只投给INT - (INT)$字符串

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

    我觉得你有点在安全性方面反应过度。 如果你要保护真的需要,交谈数据库时使用准备好的语句,并使用某种HTML净化的(像这样的:http://htmlpurifier.org/)清洁的HTML输出(防止XSS)

    +0

    我必须恭敬地不同意你的安全声明。我不认为约翰过度活跃,因为他列举的东西实在太不平凡了。安全应该是发展进程的组成部分;有些将错误地视为安全功能。 –

    +0

    我的意思是他过度反应,思考如何保护每一个可能的图层(这就是我从图中推导出来的),而仅仅保护数据库输入和html输出(防御XSS)就足够了。 – Itako