【问题标题】:Dynamically typed languages and remote method invocation动态类型语言和远程方法调用
【发布时间】:2011-09-05 05:53:17
【问题描述】:

有些人可能知道可以从 Flash 远程调用 PHP 方法。 有时,远程 PHP 方法的输入参数是一个整数数组。 因为 PHP 是动态类型的,攻击者可以传递任何东西的数组。 整数数组必须在 SQL 查询中使用。 目前我正在阻止这样的注射:

foreach ($unsafeArray as $value)
    $safeArray[] = (int)$value;

你会推荐什么?也许我应该开始使用 Java :D

【问题讨论】:

  • 问题不在于类型系统,而在于 rpc 协议。静态/动态类型与此正交。

标签: php mysql flash apache-flex


【解决方案1】:

您可以使用:$aSafeArray = array_map('intval', $aUnsafeArray); 来确保所有传递的值都是整数。

我的建议是开始使用prepared statements! 示例:

$o->bindParam(':anint', $iInt, PDO::PARAM_INT);

【讨论】:

    【解决方案2】:

    你会推荐什么?

    我不是flash专家,但确实可以通过知道其名称来调用PHP方法,并且可以将参数作为数组传递。所以问题实际上不是远程方法调用,而是输入过滤和验证。

    根据意图的行为,我会使用 intval 而不是硬强制转换为 int(AFAIR 它将在无效值上返回 0),否则您可能会抛出异常或其他任何东西。你必须先定义它的行为。

    也许我应该开始使用 Java

    不,除非您在开发速度和编译和运行时的巨大内存需求方面想要一个臃肿的解决方案:p

    【讨论】:

    • 出于预期目的,“硬转换为 int”和intval 完全相同。另外,您能否澄清一下您的第一段的意思?
    • 糟糕,抱歉。我重新阅读了我的 PHP 文档,确实您是正确的。我的意思是标题并没有真正反映真正的问题,即输入过滤和验证。
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多