Blame view

libs/SMARTY/internals/core.is_secure.php 1.65 KB
42868d70   andryeyev   Создал GIT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  <?php
  /**
   * Smarty plugin
   * @package Smarty
   * @subpackage plugins
   */
  
  /**
   * determines if a resource is secure or not.
   *
   * @param string $resource_type
   * @param string $resource_name
   * @return boolean
   */
  
  //  $resource_type, $resource_name
  
  function smarty_core_is_secure($params, &$smarty)
  {
      if (!$smarty->security || $smarty->security_settings['INCLUDE_ANY']) {
          return true;
      }
  
      if ($params['resource_type'] == 'file') {
          $_rp = realpath($params['resource_name']);
          if (isset($params['resource_base_path'])) {
              foreach ((array)$params['resource_base_path'] as $curr_dir) {
                  if ( ($_cd = realpath($curr_dir)) !== false &&
                       strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
                       substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
                      return true;
                  }
              }
          }
          if (!empty($smarty->secure_dir)) {
              foreach ((array)$smarty->secure_dir as $curr_dir) {
                  if ( ($_cd = realpath($curr_dir)) !== false) {
                      if($_cd == $_rp) {
                          return true;
                      } elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
                          substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) {
                          return true;
                      }
                  }
              }
          }
      } else {
          // resource is not on local file system
          return call_user_func_array(
              $smarty->_plugins['resource'][$params['resource_type']][0][2],
              array($params['resource_name'], &$smarty));
      }
  
      return false;
  }
  
  /* vim: set expandtab: */
  
  ?>