Php url安全性
我有这个url,我想通过参数Php url安全性,php,security,url,Php,Security,Url,我有这个url,我想通过参数http://localhost/my_site/page.php?p=some-字符串 现在,我有一个函数,我用它来尝试使这个url安全。我想让它只包含字母、数字和-字符 function clear($url) { $url = trim($url); $url = preg_replace("/[^a-zA-Z0-9\-]/", "", $url); return $url; } $p = $_GET['p']; $p = clear(
http://localhost/my_site/page.php?p=some-字符串
现在,我有一个函数,我用它来尝试使这个url安全。我想让它只包含字母、数字和-字符
function clear($url) {
$url = trim($url);
$url = preg_replace("/[^a-zA-Z0-9\-]/", "", $url);
return $url;
}
$p = $_GET['p'];
$p = clear($p);
同样在htaccess中,我有这个规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([A-Za-z0-9\-]+)/?$ page.php?p=$1 [L]
这足以保证url的安全吗?
.htaccess
会导致安全层不好,特别是如果有人部署在nginx而不是Apache上。没有任何东西阻止某人访问/page.php?p='或1=1--代码>有吗
后续的clear()
函数可能足以去除任何不需要的字符,但这是否“安全”取决于在“清除”它之后,$p
代码的其余部分会做什么
这个问题有两种变体,您可能也想问:
如何确保用户输入不会导致安全漏洞?
- 这是特定于领域的,您不会找到一个一刀切的通用解决方案
- 如果您担心SQL注入,而不担心传递到URL的内容
- 如果您担心XSS、LFI、RFI等,那么您也可以实现其他特定于域的安全控制
如何确保用户输入有效。
- 这可能会有帮助。它是一个开源输入过滤/验证库,用于处理结构化输入(多维数组,即
$\u GET
和$\u POST
)
例如,您可以这样做:
<?php
use ParagonIE\Ionizer\GeneralFilterContainer;
use ParagonIE\Ionizer\Filter\{
StringFilter,
WhiteList
};
// Define properties to filter:
$ic = new GeneralFilterContainer();
$ic->addFilter(
'page',
(new StringFilter())
->setPattern('^[A-Za-z0-9_\-]{3,24}$')
);
// Invoke the filter container on the array to get the filtered result:
try {
// $get passed all of our filters.
$get = $ic($_GET);
} catch (\TypeError $ex) {
// Invalid data provided.
}
您不需要达到这样的程度,因为GET变量“Safe”取决于用法和上下文,这一点本问题没有详细介绍。您想让url安全-针对什么?您所做的与安全性无关。@N.B.我有一个xml文件,需要参数从中检索数据。只是想确保人们不会弄乱url。htaccess只是为了让url“更好”。希望这有帮助这确实与安全有很大关系。这是一种有效且非常强大的url参数输入验证。虽然这本身并不能保证任何安全性,但它是一个很好的构建块,并且对注入型攻击非常有用。所以我觉得有这个过滤器很好。