<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/taint.detail.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'taint.detail.sinks.php',
    1 => 'taint 在哪里发出警告',
    2 => 'taint 在哪里发出警告',
  ),
  'up' => 
  array (
    0 => 'taint.detail.php',
    1 => '传播规则与被检查的汇点',
  ),
  'prev' => 
  array (
    0 => 'taint.detail.basic.php',
    1 => '污点标记如何传播',
  ),
  'next' => 
  array (
    0 => 'ref.taint.php',
    1 => 'Taint 函数',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'reference/taint/detail.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="taint.detail.sinks" class="section">
  <h2 class="title">taint 在哪里发出警告</h2>
  <p class="simpara">
   当一个被污染的字符串到达下列汇点（sink）之一时，taint 会发出警告
   （默认级别为 <strong><code><a href="errorfunc.constants.php#constant.e-user-warning">E_USER_WARNING</a></code></strong>；可通过
   <a href="taint.configuration.php#ini.taint.error-level" class="link">taint.error_level</a>
   配置）。只有顶层的字符串参数会被检查；只是内容中包含被污染值的数组，
   在 dump 时不会触发警告。
  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>输出类汇点</strong></caption>
    
     <thead>
      <tr><th>汇点</th><th>检查的内容</th></tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">echo</code>、<code class="literal">print</code></td>
       <td>被 echo / print 输出的表达式</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.printf.php" class="function">printf()</a></span>、<span class="function"><a href="function.vprintf.php" class="function">vprintf()</a></span></td>
       <td>格式串及其代入的各个值</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.print-r.php" class="function">print_r()</a></span>、<span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span>、<span class="function"><a href="function.var-export.php" class="function">var_export()</a></span></td>
       <td>被 dump 的值（当它是字符串时）</td>
      </tr>

      <tr>
       <td>带消息的 <code class="literal">exit</code>/<code class="literal">die</code></td>
       <td>消息内容</td>
      </tr>

      <tr>
       <td>写入 <code class="literal">php://output</code> 的 <span class="function"><a href="function.file-put-contents.php" class="function">file_put_contents()</a></span>、<span class="function"><a href="function.fwrite.php" class="function">fwrite()</a></span>、<span class="function"><a href="function.fputs.php" class="function">fputs()</a></span></td>
       <td>被写入的数据</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>文件系统类汇点</strong></caption>
    
     <thead>
      <tr><th>汇点</th><th>检查的内容</th></tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><span class="function"><a href="function.fopen.php" class="function">fopen()</a></span>、<span class="function"><a href="function.opendir.php" class="function">opendir()</a></span>、<span class="function"><a href="function.unlink.php" class="function">unlink()</a></span></td>
       <td>路径</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.file.php" class="function">file()</a></span>、<span class="function"><a href="function.readfile.php" class="function">readfile()</a></span>、<span class="function"><a href="function.file-get-contents.php" class="function">file_get_contents()</a></span>、<span class="function"><a href="function.highlight-file.php" class="function">highlight_file()</a></span>/<span class="function"><a href="function.show-source.php" class="function">show_source()</a></span></td>
       <td>路径</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.copy.php" class="function">copy()</a></span>、<span class="function"><a href="function.rename.php" class="function">rename()</a></span>、<span class="function"><a href="function.move-uploaded-file.php" class="function">move_uploaded_file()</a></span></td>
       <td>源路径和目标路径</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.mkdir.php" class="function">mkdir()</a></span>、<span class="function"><a href="function.rmdir.php" class="function">rmdir()</a></span>、<span class="function"><a href="function.touch.php" class="function">touch()</a></span></td>
       <td>路径</td>
      </tr>

      <tr>
       <td><code class="literal">include</code>、<code class="literal">include_once</code>、<code class="literal">require</code>、<code class="literal">require_once</code></td>
       <td>文件路径</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>SQL 类汇点</strong></caption>
    
     <thead>
      <tr><th>汇点</th><th>检查的内容</th></tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><span class="function"><a href="mysqli.query.php" class="function">mysqli_query()</a></span>、<span class="function"><a href="mysqli.prepare.php" class="function">mysqli_prepare()</a></span>、<span class="function"><a href="mysqli.real-query.php" class="function">mysqli_real_query()</a></span>、<span class="function"><a href="mysqli.multi-query.php" class="function">mysqli_multi_query()</a></span></td>
       <td>查询字符串</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.mysql-query.php" class="function">mysql_query()</a></span>、<span class="function"><strong>sqlite_query()</strong></span>、<span class="function"><strong>sqlite_single_query()</strong></span>、<span class="function"><a href="function.oci-parse.php" class="function">oci_parse()</a></span>、<span class="function"><a href="function.pg-query.php" class="function">pg_query()</a></span>、<span class="function"><a href="function.pg-send-query.php" class="function">pg_send_query()</a></span></td>
       <td>查询字符串</td>
      </tr>

      <tr>
       <td><span class="methodname"><a href="mysqli.query.php" class="methodname">mysqli::query()</a></span>、<span class="methodname"><a href="mysqli.prepare.php" class="methodname">mysqli::prepare()</a></span>、<span class="methodname"><a href="mysqli.real-query.php" class="methodname">mysqli::real_query()</a></span>、<span class="methodname"><a href="mysqli.multi-query.php" class="methodname">mysqli::multi_query()</a></span></td>
       <td>查询字符串</td>
      </tr>

      <tr>
       <td><span class="methodname"><a href="pdo.query.php" class="methodname">PDO::query()</a></span>、<span class="methodname"><a href="pdo.prepare.php" class="methodname">PDO::prepare()</a></span>、<span class="methodname"><a href="pdo.exec.php" class="methodname">PDO::exec()</a></span></td>
       <td>查询字符串</td>
      </tr>

      <tr>
       <td><span class="methodname"><a href="sqlite3.query.php" class="methodname">SQLite3::query()</a></span>、<span class="methodname"><a href="sqlite3.prepare.php" class="methodname">SQLite3::prepare()</a></span>、<span class="methodname"><a href="sqlite3.exec.php" class="methodname">SQLite3::exec()</a></span>、<span class="methodname"><strong>SQLiteDatabase::query()</strong></span>、<span class="methodname"><strong>SQLiteDatabase::singleQuery()</strong></span></td>
       <td>查询字符串</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>命令执行类汇点</strong></caption>
    
     <thead>
      <tr><th>汇点</th><th>检查的内容</th></tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><span class="function"><a href="function.exec.php" class="function">exec()</a></span>、<span class="function"><a href="function.system.php" class="function">system()</a></span>、<span class="function"><a href="function.passthru.php" class="function">passthru()</a></span>、<span class="function"><a href="function.shell-exec.php" class="function">shell_exec()</a></span>（包括反引号运算符）</td>
       <td>命令字符串</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span>、<span class="function"><a href="function.popen.php" class="function">popen()</a></span></td>
       <td>命令字符串</td>
      </tr>

      <tr>
       <td><code class="literal">eval</code></td>
       <td>被执行的代码</td>
      </tr>

      <tr>
       <td>动态调用，如 <code class="literal">$func()</code>、<code class="literal">$obj-&gt;$method()</code>、<span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span>、数组形式的 callable</td>
       <td>被解析的函数/方法/类名</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.preg-match.php" class="function">preg_match()</a></span>、<span class="function"><a href="function.preg-match-all.php" class="function">preg_match_all()</a></span>、<span class="function"><a href="function.preg-replace.php" class="function">preg_replace()</a></span>、<span class="function"><a href="function.preg-split.php" class="function">preg_split()</a></span>、<span class="function"><a href="function.preg-grep.php" class="function">preg_grep()</a></span>、<span class="function"><a href="function.preg-replace-callback.php" class="function">preg_replace_callback()</a></span></td>
       <td>pattern（以及 <span class="function"><a href="function.preg-replace-callback.php" class="function">preg_replace_callback()</a></span> 的回调名）</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>HTTP 头与 Cookie 类汇点</strong></caption>
    
     <thead>
      <tr><th>汇点</th><th>检查的内容</th></tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><span class="function"><a href="function.header.php" class="function">header()</a></span></td>
       <td>header 字符串</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>、<span class="function"><a href="function.setrawcookie.php" class="function">setrawcookie()</a></span></td>
       <td>cookie 的名称和值</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>其他汇点</strong></caption>
    
     <thead>
      <tr><th>汇点</th><th>检查的内容</th></tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span></td>
       <td>序列化字符串</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.mail.php" class="function">mail()</a></span></td>
       <td>to、subject、additional_parameters 和 additional_headers（邮件正文属于内容，不检查）</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="simpara">
   警告的格式为
   <code class="literal">function_name() [sink]: message</code>，其中
   <code class="literal">sink</code> 指明被检查的操作（例如
   <code class="literal">echo</code>、<code class="literal">include</code> 或函数名），
   message 则描述发现的可疑污染内容。
  </p>
 </div><?php manual_footer($setup); ?>