保护接收AJAX POST和GET请求的PHP页面

时间:2014-06-24 16:42:46

标签: php ajax security pdo

我有一个应用程序,我有一个类文件来处理我的所有ajax POST和GET请求。

  • ajax.class.php

任何人都可以推荐一种解决方案,阻止该网页接收任何恶意或未经授权的请求。我已经在使用PDO预处理语句,并使用PurifyHTML类来清理一些包含HTML的用户输入。我主要担心的是有人查看我的源代码并看到我的所有表单操作都设置为“/classes/ajax.class.php”,然后尝试向其发送不需要的请求。

if($_GET['ajax'] == 'callerIdInfo'){
    $number = $_GET['number'];
    ... [RECORD TO DB]
}

if($_POST['ajax'] == 'submitTicket'){
   ... [MORE FUNCTIONS]
}

etc etc..

2 个答案:

答案 0 :(得分:0)

我将此功能添加到我的主类:

function generateToken() {

    if(empty($_SESSION['form']['token']))
        $_SESSION['form']['token'] = md5(uniqid(mt_rand(),true));

}

然后将其添加到我的表单中,并为每个表单生成一个隐藏的令牌。

<input type="hidden" name="token" value="<?php echo $_SESSION['form']['token']; ?>"/>

然后检查每个请求中的令牌

if (empty($_POST['token'])){
  return false;
} else {
    // Do AJAX
    if($_POST['ajax'] == 'submitTicket'){
    ... 
    }

}

答案 1 :(得分:0)

你可以保持简单。

您可以在应用中定义强加密密钥:

define('TOKEN_KEY', '%b&*0D0/V%)^l76L_O4(eWm6R&tv3^d916PV+"m_}te8On8L0a4-bd1');

将其放在config.php文件中,例如

include('config.php');
try {

    $token = $_POST['token'];
    if ($_POST['token']!==TOKEN_KEY) {
        throw new Exception('You Are not autorized '.$token);
    }

    //continue execution
    include('/classes/ajax.class.php');


} catch (Exception $e) {
    error_log('Error!',  $e->getMessage(), "\n");
    //stop execution exit 
}

因此,您不仅可以生成会话并检查它是否为空,而是可以实现类似上述的操作,但非常简单。

您可以将逻辑包装成功能

function get_token() {
    return TOKEN_KEY;
}


function token_isvalid($token) {
    return $token===TOKEN_KEY;
}

使用

    if (!token_isvalid($_POST['token'])) {
        throw new Exception('Division by zero.');
    }