Php 创建一个脚本,当它在$\u Post数组中检测到base64时,该脚本将终止

Php 创建一个脚本,当它在$\u Post数组中检测到base64时,该脚本将终止,php,arrays,post,Php,Arrays,Post,我一直在尝试创建一个小脚本,当它检测到base64编码的信息被发布到我们的服务器时,该脚本就会失效 由于某种原因,它没有进入循环 if (in_array('base64_decode', $_POST, true)) { ... } 当我测试它的时候。我错过了什么 编辑:很抱歉,我误解得不够清楚。我有一些事情像 [gkwdwjfvzjpj] => eval(base64_decode($_POST.... 已发布到服务器,我想知道如何检测此字符串。您的代码搜索的是字符串“base64

我一直在尝试创建一个小脚本,当它检测到base64编码的信息被发布到我们的服务器时,该脚本就会失效

由于某种原因,它没有进入循环

if (in_array('base64_decode', $_POST, true)) { ... }
当我测试它的时候。我错过了什么

编辑:很抱歉,我误解得不够清楚。我有一些事情像

[gkwdwjfvzjpj] => eval(base64_decode($_POST....

已发布到服务器,我想知道如何检测此字符串。

您的代码搜索的是字符串
“base64_encode”
是否是发布的值之一

如果要检查
base64\u decode
是否位于已发布数据的子字符串中:

function spam_in_post_values () {
  foreach ($_POST as $postval) {
    if (strpos($postval, 'base64_decode') !== false) {
      return true;
    }
  }
  return false;
}
但是,您似乎正在将发布的数据插入HTML,这是一个坏主意

编程中有一个原则叫做。你应该:

  • 永远不要将用户输入直接插入HTML

    <p><?php echo $_POST['userdata']; ?></p>
    
    当用户发送恶意数据时,他可以使用您的权限执行所有操作 在PHP中。删除文件、发送电子邮件、下载恶意软件并将其安装到服务器,等等

  • 永远不要在用户输入JavaScript时运行
    eval
    (更好的是,永远不要使用
    eval
    !) 出于上述相同的原因,恶意输入可以在客户端中运行任意代码

    如果希望获取JSON数据,请使用
    JSON.parse(jsondata)
    将其作为对象获取(或
    jQuery.parseJSON(…)
    ,或
    angular.parseJSON(…)
    ,或您的库提供的任何内容)

    这也扩展到
    eval
    的“隐藏”使用,如
    新函数(“arg”,userSuppliedString)
    ,事件处理程序
    element.onclick=“alert(“”)”
    ,setTimeout/setInterval调用
    setTimeout(“element.textContent=“+userSuppliedValue,3000)
    ,等等



与其测试您不想要的数据,不如验证您是否收到了您想要的数据。

与其检查您不想要的数据,不如使用验证来检查以确保提交的数据有效。
base64\u decode
无效,但这不是您的问题。您可能检测到的是
提交时带有
。您的编辑没有明确说明您想要做什么/阻止什么。如果您只想“检测此字符串”,那么您是在处理症状,而不是原因。您是否在页面的某个位置插入已发布的内容?不要那样做!您是直接将发布的内容插入JavaScript还是使用
eval
解析用户内容?(不管是PHP还是JavaScript)-不要这样做!对不起,这是对我问题的一个很好的回答。但我可能需要澄清我的问题。请查看更新的帖子。更新我的答案以反映您的更改。请检查并帮助理解您未来的问题。
"</p><script>location.href='http://otherwebsite';</script>"
<a onclick="alert('Hello <?php echo $_POST['username']; ?>!')">
$x = $_POST['x'];   // we expect "5"
$y = $_POST['y'];   // we expect "3"
$operator = $_POST['operator'];   // we expect "*", "+", "-", "/"
$result = eval($x . $operator . $y);