Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 清理$\u GET参数以避免XSS和其他攻击_Php_Sanitization - Fatal编程技术网

Php 清理$\u GET参数以避免XSS和其他攻击

Php 清理$\u GET参数以避免XSS和其他攻击,php,sanitization,Php,Sanitization,我有一个php网站,它包含()将内容嵌入到模板中。要加载的页面在get参数中给出,我将“.php”添加到参数的末尾并包含该页面。我需要做一些安全检查,以避免XSS或其他东西(不是mysql注入,因为我们没有数据库)。我得出的结论如下 $page = $_GET['page']; if(!strpos(strtolower($page), 'http') || !strpos($page, '/') || !strpos($page, '\\') || !strpos($page, '.

我有一个php网站,它包含()将内容嵌入到模板中。要加载的页面在get参数中给出,我将“.php”添加到参数的末尾并包含该页面。我需要做一些安全检查,以避免XSS或其他东西(不是mysql注入,因为我们没有数据库)。我得出的结论如下

$page = $_GET['page'];

if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
    !strpos($page, '\\') || !strpos($page, '..')) {
        //append ".php" to $page and include the page
我还能做些什么来进一步净化我的输入

$page = preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['page']);

这可能是清理这一问题的最快方法,它将采取任何措施,并确保它只包含字母、数字、下划线或破折号。

定义源代码中的页面的显式列表,然后使用它检查输入。是的,这是更多的工作,但它非常清楚什么是允许的,什么是不允许的。例如:

$AVAILABLE_PAGES = array('home', 'news',  ...);
$AVAILABLE_PAGES = array_fill_keys($AVAILABLE_PAGES, 1);

$page = $_GET['page'];
if (!$AVAILABLE_PAGES[$page]) {
   header("HTTP/1.0 404 Not Found");
   die('Page not found.');
}

include "pages/$page.php";

不要“清理”-攻击特定于数据的使用,而不是源。而是在输出值时对其进行转义。另请参见我对

的回答,不要像这样检查strps()的结果-如果匹配项位于字符串的开头,它将返回零,这将计算为false@Tom,acceppted解决方案也让我避免了这种情况,无论如何,谢谢,我会记住你对未来代码的建议。另请参见:我读过它,但我认为这不适合我正在开发的网站。仍然可以使用十六进制代码进行攻击:请参阅,而且两个链接都是关于mysql的,这个问题不是关于sql注入的