Php 筛选get和post值
我在其中调用我的主页框架_ui.php,我需要auth.php,在这里我有一个过滤函数Php 筛选get和post值,php,post,filter,get,Php,Post,Filter,Get,我在其中调用我的主页框架_ui.php,我需要auth.php,在这里我有一个过滤函数 function filter($data) { // normalize $data because of get_magic_quotes_gpc $dataNeedsStripSlashes = get_magic_quotes_gpc(); if ($dataNeedsStripSlashes) { $data = stripslashes($data); }
function filter($data)
{
// normalize $data because of get_magic_quotes_gpc
$dataNeedsStripSlashes = get_magic_quotes_gpc();
if ($dataNeedsStripSlashes) {
$data = stripslashes($data);
}
// normalize $data because of whitespace on beginning and end
$data = trim($data);
// strip tags
$data = strip_tags($data);
// replace characters with their HTML entitites
$data = htmlentities($data);
// mysql escape string
$data = mysql_real_escape_string($data);
return $data;
}
在每个包含get和post变量的页面上,我都做了一个:(并调用my framework.php)
如果我将上面的函数设置为函数并在每个页面上调用它,该函数是否仍能正常运行
function filter_all() {
// filter GET values
foreach ($_GET as $key => $value) {
$get[$key] = filter($value);
}
// filter post
foreach ($_POST as $key => $value) {
$post[$key] = filter($value);
}
}
我知道这不是最安全的方法,但是我想知道这类事情是否可能并且不会对我的代码产生负面影响。您只需要做一些调整,以确保“过滤”值对代码的其余部分可用。有两种方法可以做到这一点,将它们标记为
global
或返回它们;可能第二种选择通常被认为更干净。下面是一个例子:
function filter_all() {
$get = array();
$post = array();
// filter GET values
foreach ($_GET as $key => $value) {
$get[$key] = filter($value);
}
// filter post
foreach ($_POST as $key => $value) {
$post[$key] = filter($value);
}
return array(
'get' => $get,
'post' => $post);
}
$aFilteredInput = filter_all();
$get = $aFilteredInput['post'];
$post = $aFilteredInput['post'];
您只需进行一些调整,以确保“过滤”值对代码的其余部分可用。有两种方法可以做到这一点,将它们标记为
global
或返回它们;可能第二种选择通常被认为更干净。下面是一个例子:
function filter_all() {
$get = array();
$post = array();
// filter GET values
foreach ($_GET as $key => $value) {
$get[$key] = filter($value);
}
// filter post
foreach ($_POST as $key => $value) {
$post[$key] = filter($value);
}
return array(
'get' => $get,
'post' => $post);
}
$aFilteredInput = filter_all();
$get = $aFilteredInput['post'];
$post = $aFilteredInput['post'];
filter\u all()函数不返回任何内容,也不修改$\u GET和$\u POST全局变量,因此在函数完成运行这些原始变量后,foreach循环将实际上是相同的。如果计划使用$\u GET/$\u POST,则应直接操作$\u GET/$\u POST或全局$GET/$POST,或者返回两者的组合。除此之外,你的计划没有什么负面影响
如果每次都要这样做,那么最好不要创建函数,只包含一个文件(如framework_ui.php),该文件只执行循环并过滤变量
zerkms是正确的,尽管您的过滤函数并不理想,因为它不安全,而且事实上,如果您计划重新显示用户提交的信息,mysql\u real\u escape\u字符串将导致问题(除其他外)
要引用OWASP ESAPI项目页面:
不要编写自己的安全控件!当涉及到为每个web应用程序或web服务开发安全控制时,重新发明轮子会导致浪费时间和巨大的安全漏洞。OWASP企业安全API(ESAPI)工具包帮助软件开发人员防范与安全相关的设计和实现缺陷
filter\u all()函数不返回任何内容,也不修改$\u GET和$\u POST全局变量,因此在函数完成运行这些原始变量后,foreach循环将实际上是相同的。如果计划使用$\u GET/$\u POST,则应直接操作$\u GET/$\u POST或全局$GET/$POST,或者返回两者的组合。除此之外,你的计划没有什么负面影响
如果每次都要这样做,那么最好不要创建函数,只包含一个文件(如framework_ui.php),该文件只执行循环并过滤变量
zerkms是正确的,尽管您的过滤函数并不理想,因为它不安全,而且事实上,如果您计划重新显示用户提交的信息,mysql\u real\u escape\u字符串将导致问题(除其他外)
要引用OWASP ESAPI项目页面:
不要编写自己的安全控件!当涉及到为每个web应用程序或web服务开发安全控制时,重新发明轮子会导致浪费时间和巨大的安全漏洞。OWASP企业安全API(ESAPI)工具包帮助软件开发人员防范与安全相关的设计和实现缺陷
你的
过滤器
功能很糟糕,对与“安全性”几乎无关的输入应用随机函数。你的问题不清楚“我想知道这种事情是否可能,不会对我的代码产生负面影响。”-你为什么不试试呢?同意@zerkms。也就是说,您需要从函数返回$get
和$post
,否则它们将退出作用域。我会的,但无法知道(据我所知)检查字符串是否被转义。过滤函数来自@sberry,你说的正是我所想的:如果$get
和post
是全局函数,那么应该这样声明,如果不是,它将只存在于函数范围内。你的过滤
函数很糟糕,将随机函数应用于与“安全性”几乎无关的输入你的问题不清楚“我想知道这种事情是否可行,不会对我的代码产生负面影响。”-你为什么不试试呢?同意@zerkms。也就是说,您需要从函数返回$get
和$post
,否则它们将退出作用域。我会的,但无法知道(据我所知)检查字符串是否被转义。过滤函数来自@sberry,你说的正是我所想的:如果$get
和post
是全局函数,那么应该声明为全局函数,如果不是全局函数,那么它将只存在于函数范围内。感谢owasp链接,我将不得不研究它。也谢谢你的解释!没问题,亚历克斯,祝你好运!另外,主网站可能有更多的资源,以及在感谢owasp链接,我将不得不研究它。也谢谢你的解释!没问题,亚历克斯,祝你好运!另外,可能有更多资源的主站点位于