代码之家  ›  专栏  ›  技术社区  ›  nico

消毒PHPSESID

  •  8
  • nico  · 技术社区  · 14 年前

    我将phpsessid传递到一个php页面(通过post),我想知道什么是清理输入的最佳方法。会 mysql_real_escape_string 够了吗?在处理会话ID时,我是否需要考虑一些特殊的因素(我的意思是,它们只能是字母和数字,对吗?)?

    编辑: 为了澄清这个问题,我真正想知道的是:如果有人篡改了post数据,他是否可以发送一个恶意字符串phpssid,当我打电话时,它会做一些令人讨厌的事情? session_id($_GET['PHPSESSID']) ? 我个人想不出任何,但比抱歉更安全…

    谢谢

    尼科

    3 回复  |  直到 14 年前
        1
  •  7
  •   Pekka    14 年前

    很好的想法,但据我所见,不需要清除这个输入。phpsessid将传递给 session_id() .

    会话ID确实有 some limitations:

    根据会话处理程序的不同,会话ID中不允许所有字符。例如,文件会话处理程序只允许a-z a-z 0-9,(逗号)和-(减号)范围内的字符!

    但是 会话ID() 应使用错误消息处理与这些规则的偏差。(您可能希望捕获该错误消息并在出错时终止脚本。)

    我能看到的唯一真正危险是当您使用自定义会话处理程序(例如连接到数据库)时。你 在这种情况下,必须对输入进行消毒,例如使用 mysql_real_escape_string() . 然而,这是应该发生的事情 里面 自定义会话处理程序。

    毫无疑问,如果您在其他上下文中使用会话ID(例如,作为HTML表单中的参数),那么您需要为特定的输出采取必要的卫生措施(在这种情况下, htmlspecialchars() )

        2
  •  2
  •   jeroen    14 年前

    如果您真的需要通过post传递会话ID(看不出为什么是真的…),并且您知道您要允许哪些字符,那么我将使用正则表达式来检查这一点。

    mysql_real_escape_string 是用于数据库输入的,需要数据库连接,不清理任何内容,只转义一些特殊字符。

        3
  •  1
  •   symcbean    14 年前

    mysql-real-escape-string足够吗?

    错了。应始终使用适当的方法将数据清理到要将值写入的位置。如果/当你在一个MySQL数据库中写入一个值时,你只需要使用mysql_real_escape_string()。

    你的评论不清楚你到底在做什么。你的意思是你用PHP中的curl来创建帖子吗?如果是这样,那么如果您将curlot-postfields作为数组传递,就不需要进行任何清理(严格来说不是这样的,但curl会为您这样做),但是如果您将curlot-postfields作为字符串传递,则需要对值进行urlencode。

    是否将值写入浏览器以便用户提交值?在这种情况下,您将使用htmlEntities()将值写入表单字段。

    还有别的吗?