【问题标题】:Why can't I submit text that contains the function fgets()? [closed]为什么我不能提交包含函数 fgets() 的文本? [关闭]
【发布时间】:2012-10-13 20:31:29
【问题描述】:

我在学校期间使用我的网站在线编写代码(并在我的编程项目中取得进展),并将代码发送到我的电子邮件地址以继续在家中编写代码。

文本可以在<textarea><input> 字段中(使用name="Code" id="Code")。
无论哪种方式,我都无法提交包含 C/C++ 函数 fgets() 的文本:

TODO: Include a more stable function to get user input,
      such as fgets(input, 20, stdin);

我不知道为什么提交文本:fgets(input, 20, stdin) 会是一个问题,为什么在 <textarea><input> 中的 任何 文本会是一个问题,因为它都是纯文本,而不是实际的代码。

当我点击提交时,虽然我的 <textarea> 中的文本包含 fgets(),但什么也没有发生(而不是给我 Invalid input 消息或 Email Sent 消息),并且我的文本没有被发送。

【问题讨论】:

标签: php html fgets


【解决方案1】:

可能是您服务器上的某些东西将此视为企图入侵该网站。

快速谷歌搜索显示mod_security(一个相当常见的 Apache 模块,试图阻止 SQL 注入和其他漏洞利用)可能会阻止包含 fgets() 调用的 POST 参数。 http://forums.modx.com/thread?thread=9677

【讨论】:

  • 我可以做些什么来发送包含 PHP 函数的文本吗?
  • 当然,禁用 mod_security(或要求您的网络主机这样做)。
  • 好的,我想我会保持启用它(出于安全考虑)并通过JavaScript中的文本来修改其中的PHP函数,例如:fgets(input, 20, stdin); ==> fg-ets(input, 20, stdin);
【解决方案2】:

您不应该自己将参数转换为一个字符串(或者如果是这样,请使用一些javascript alternative to phps urlencode())。

jQuery 支持[1][2] data 作为anonymous object

要发送到服务器的数据。它被转换为查询字符串,如果 还不是一个字符串。它附加到 GET 请求的 url。看 processData 选项来防止这种自动处理。对象必须 是键/值对。如果 value 是一个 Array,jQuery 会序列化多个 基于传统设置的值具有相同键的值 (如下所述)。

所以你可以使用:

data: {
  'Name': name,
  'Code': code,
  ...
}

它应该可以工作,更重要的是它需要注意正确的编码(转义)。如果这没有帮助(问题不在于格式错误的“原始数据”)请尝试ceejayoz's solution

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2011-07-17
    • 2012-03-19
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多