在哪里清理PHP $_POST []输入?

我正在使用codeigniter框架。

我应该在哪里清理PHP输入 – 控制器或模型?

我曾经是尽可能集中卫生的朋友,但对SO(for example here)的广泛讨论改变了主意。绝对值得一读。

我向你提供以下做法:

在中央验证程序中,不要进行卫生,或只是“粗略”检查(例如数据类型)和大小(“$ _POST [”category_name“]不应大于200字节。”)

将传入的变量标记为不安全(例如$ unsafe_id = $ _POST [“category_name”];)。将它们存储在您可用的任何控制器/类/构造中。

消毒使用的数据。例如,如果在执行调用中使用传入数据,请在呼叫前直接进行必要的卫生:

  $safe_category_name = escapeshellargs($unsafe_category_name);
  exec("external_binary -category_name '$safe_category_name'");

如果在一个(例如mySQL)查询中使用相同的数据,则再次在调用前对其进行清理:

 $safe_category_name = mysql_real_escape_string ($unsafe_category_name);
 mysql_query("SELECT * FROM items WHERE category_name = '$safe_category_name'");

(这只是一个例子,如果从零开始一个项目,你将需要使用PDO和准备好的语句,这样可以消除在这个上下文中转移传入数据的麻烦。)

如果在网页中输出相同的数据,则再次直接在呼叫前进行卫生:

$safe_category_name = htmlspecialchars($unsafe_category_name);
echo "<span>$safe_category_name</span>";

这种做法

>建立一个工作流程,假设有不安全的变量需要首先处理,这将导致更安全的编程风格IMO。
>防止不必要的转换。
>有助于打破一个单一的方法来使输入“安全”的错觉。没有。环境依赖于100%。

http://stackoverflow.com/questions/2401706/where-to-sanitize-php-post-input

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在哪里清理PHP $_POST []输入?