PHP $ _POST用户名卫生 - 这是怎么回事

时间:2011-10-17 15:55:31

标签: php post validation sanitize alphanumeric

我用Google搜索并搜索了所有内容,但我无法回答。

为什么下面的PHP代码允许加号:

$aValid = array('-', '_', '.');

if (ctype_alnum(str_replace($aValid, '', $_POST['Rusername']))){

(如果用户键入1234+,就像它有效吗????)。

我通常会找到旁路,但这是非常必要的;

$aValid = array('-', '_', '.'); 
if (ctype_alnum(str_replace($aValid, '', (htmlentities ( trim ( $_POST['Rusername'] ) , ENT_NOQUOTES ))))){
    echo "+ ok";
}else{
    echo "+ not ok";
}

我想使用这种验证,只需在需要时为$ aValid添加特殊字符。

在插入MySQL之前,我会做mysql_real_escape_string或预备语句。

为第一段代码添加+符号的任何想法。在我看来,它真的不应该。

最新更新 - 我需要几个小时的低级调试HTTP标头,以确定我的A端更改了Content-Type,以便+符号在到达PHP if子句之前变为空格(在我的白名单中) ......

什么 - 我希望永远不会发生在你身上 - 体验:)。

提醒自己:如果jQuery是这个验证过程中的主要参与者,应该提到jQuery ......

2 个答案:

答案 0 :(得分:2)

您应该做的是检查流程的每个阶段,而不是将它们全部关闭到一行:

$name = $_POST['Rusername'];
var_dump($name);
$name = str_replace($aValid, '', $name);
var_dump($name);

等...基本调试。如果您在声明中有多个阶段,那么请检查每个阶段。 ctype可能工作得很好,但str_replace让你以某种方式失败。

答案 1 :(得分:0)

  

为第一段代码添加+符号的任何想法。在我看来,它真的不应该。

不行......第一段代码返回false ..

如果您要删除+符号,则必须将其添加到$aValid变量中