PHP - 如何获得令牌?

时间:2011-01-11 20:33:53

标签: php validation token

我被告知我需要验证下面的令牌,但我不知道从哪里开始。我只能公开访问我从中提取数据的网站。有人向我解释令牌或举例让我感动吗?

我是否需要访问其他服务器?

function send_CAD($number, $street, $website, $f_opts = true){         
    $year   = date('Y', time());    
    $number = trim($number);
    $street = urlencode(trim($street));
    $post_data = "__EVENTTARGET=&__EVENTARGUMENT=&".
                 "__VIEWSTATE=/wEPD...&" .
                 "__EVENTVALIDATION=/wEWNw...&".
                 "txtAddrNum=$number&listStDir=&";
...

2 个答案:

答案 0 :(得分:4)

我不确定你在问什么,所以这里是两个方向的答案:

如果您有一个正在尝试解析的完整网址,请使用parse_url

$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);

以上示例将输出:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

如果您只有网址的查询部分,则可以使用parse_str

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

如果你有一个网址,你正在尝试构建使用http_build_query

$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');

echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor

如果您需要对数据进行验证,一旦获得数据,您可以在PHP中使用内置的filter_input函数和验证/清理选项:

http://us2.php.net/manual/en/ref.filter.php
http://us2.php.net/manual/en/function.filter-input-array.php

http://us2.php.net/manual/en/filter.filters.validate.php
http://us2.php.net/manual/en/filter.filters.sanitize.php

来自filter_validate_array页面的示例:

/* data actually came from POST
$_POST = array(
    'product_id'    => 'libgd<script>',
    'component'     => '10',
    'versions'      => '2.0.33',
    'testscalar'    => array('2', '23', '10', '12'),
    'testarray'     => '2',
);
*/

$args = array(
    'product_id'   => FILTER_SANITIZE_ENCODED,
    'component'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     => FILTER_REQUIRE_ARRAY, 
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           ),
    'versions'     => FILTER_SANITIZE_ENCODED,
    'doesnotexist' => FILTER_VALIDATE_INT,
    'testscalar'   => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_SCALAR,
                           ),
    'testarray'    => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_ARRAY,
                           )

);

$myinputs = filter_input_array(INPUT_POST, $args);

var_dump($myinputs);
echo "\n";

以上示例将输出:

array(6) {
  ["product_id"]=>
      array(1) {
        [0] => string(17) "libgd%3Cscript%3E"
      }
  ["component"]=>
      array(1) {
        [0] => int(10)
      }
  ["versions"]=>
      array(1) {
        [0] => string(6) "2.0.33"
      }
  ["doesnotexist"]=>
      NULL
  ["testscalar"]=>
      bool(false)
  ["testarray"]=>
      array(1) {
        [0] => int(2)
      }
}

答案 1 :(得分:0)

VIEWSTATE等在ASP.NET中使用。在PHP中处理它们时,您无需对它们进行任何操作。如果ASP.NET将表单发布到您的php页面,您可以通过执行以下操作进行快速分析:

echo "<pre>".print_r($_REQUEST, TRUE)."</pre>";

并尝试找出你应该感兴趣的项目。然后你可以通过这样做来简单地获取这些项目,例如:

$itemid = $_REQUEST['itemid'];

您可以忽略您不需要处理的“令牌”。

你应该根据你的php页面调用方式尝试用$ _GET或$ _POST替换$ _REQUEST。