【问题标题】:Nonce and timestamp, best to secure POST values?随机数和时间戳,最好保护 POST 值?
【发布时间】:2012-05-19 01:23:23
【问题描述】:

我的网络服务器上有一个脚本,用于启动与安全支付解决方案的 HTTPS 连接。支付解决方案允许用户存储其信用卡凭据,因此脚本的完整性是强制性的。

脚本是从 Web 和 iPhone 应用程序启动的 Web 浏览器调用的。 它在条目中需要几个 POST 值:

  • 用户 ID
  • 价值
  • 货币 ...等

使用支付解决方案生成初始请求。

我的目标是尽可能保护发送到脚本的 POST 值以避免攻击,本质上是因为任何人都可以通过一个简单的 Firebug 看到它输入的 POST 变量。

脚本是通过 HTTPS 协议访问的,这是我为了保护内容数据而提出的:

if (!empty($_POST)) {

    $uid = $_POST['uid'];
    $nonce = $_POST['nonce'];
    $request_timestamp = $_POST['time'];

    //other useful values ...
}

/*
 * Test 1 : is the nonce correct ? (Example of possible hash)
 */
if (strcmp(md5($uid . $request_timestamp . 'mygrE4TpassPhraZ'), $nonce) !== 0) {
    echo 'Bad nonce';
    exit;
}

/*
 * Test 2 : is the timestamp value acceptable ? 10 seconds maximum here.
 */
if (time() - $request_timestamp > 10) {
    echo 'Request too old';
    exit;
}

/*
 * Test 3 : is this request is the first valid one that I receive with those credentials for this user ?
 */
if (strcmp(User::getOnGoingNonce($uid), $nonce) === 0) {
    echo 'Request already registered';
    exit;
}

//direct database access
User::setOnGoingNonce($uid,$nonce);

/*
 * Finally, chat granted with the payment solution ...
 */

你认为这足够安全吗?你有更清洁的解决方案吗?

我们将不胜感激,在此先感谢您。

【问题讨论】:

    标签: php security post https md5


    【解决方案1】:

    清理和过滤每个用户输入是一种很好的开发人员习惯。为此目的有一个特殊的 PHP 函数,可以使程序员的生活更轻松。它被称为filter_var()。 如果您使用数组,您可以使用filter_var_array()。 详情请见here

    所以,你的代码的实际解决方案应该是这样的:

    $uid = filter_var($_POST['uid'], FILTER_SANITIZE_NUMBER_INT);
    $nonce = filter_var($_POST['nonce'], FILTER_SANITIZE_STRING);
    $request_timestamp = filter_var($_POST['time'], FILTER_SANITIZE_STRING);
    

    我假设,'uid' 是一个整数,其他变量是字符串。但是你可以选择你需要的任何过滤器。有关过滤器的类型,请参阅 here

    在清理用户输入时,您确保您的脚本不会允许 SQL 注入攻击或 XSS 攻击。

    【讨论】:

    • 清理输入是个好主意,但它不能防止所有 SQL 注入或 XSS。您仍然需要转义 SQL 值或使用准备好的语句并转义 HTML 输出。
    猜你喜欢
    • 2019-04-05
    • 2015-04-20
    • 1970-01-01
    • 2011-02-09
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多