【问题标题】:PHP base64 encode post requestPHP base64 编码发布请求
【发布时间】:2019-06-19 06:05:06
【问题描述】:

简而言之:

<form method="post" action="">
    <textarea name="foo">bar</textarea>
</form>

我想将foo 的值发布为base64 编码(不使用ajax 来节省时间)。

详细说明:

  • 我有一个界面,人们可以在其中触发 SQL SELECT 查询以获取简单的报告。
  • 网络(公司防火墙)过滤 POST 请求,将其视为 SQL 注入。
  • 我能想到的一种解决方案是对数据进行编码,然后发出 POST 请求。然后在服务器端解码。
  • 有什么办法不使用ajax solution?这将帮助我避免重构代码。

【问题讨论】:

  • 1.防火墙如何将所有 POST 视为 SQL 注入,这毫无意义,使互联网无法使用。 2.你需要使用HTTPS!
  • 您的实际问题是什么?这读起来像是一个思路。 SQL与此有什么关系? AJAX 与它有什么关系?您想发布一个 base64 值吗?是什么阻止了你?
  • 没有 JS 是不可能的。使用 HTTPS,防火墙将无法监视请求。
  • @emix 除非他们使用自定义证书来 MITM 的所有连接很多企业都这样做。
  • @Dharman 并非全部,而是随机过滤了一些查询。可能是查询中的一些匹配模式。

标签: php html base64 encode


【解决方案1】:

您可以在提交表单之前将文本值转换为 Base64 字符串,而无需使用 Ajax,使用 window.btoa

var str = document.getElementById("foo").value;
var enc = window.btoa(str);

btoa() 方法以 base-64 编码字符串。
此方法使用“A-Z”、“a-z”、“0-9”、“+”、“/”和“=”字符对字符串进行编码。

有关btoa的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa

【讨论】:

    【解决方案2】:

    您不需要使用 Ajax,您可以使用表单的 onsubmit 事件编写一个 javascript 处理程序,将数据编码为隐藏输入,该输入与表单一起发送(注意原始文本区域没有 @ 987654323@,因此不会在 POST 中发送)。

    function encodeSql() {
    
        var e = document.getElementById('sql');
        var t = document.getElementById('sql_base64');
        t.value = encodeToBase64Somehow(e.value);
        return true;
    }
    
    <form ... onsubmit="return encodeSql()">
        <textarea id="sql">...</textarea>
        <input type="hidden" name="sql_base64" id="sql_base64" />
    </form>
    

    【讨论】:

    • 不错!我会试试这个。
    • Googlian's 回答编码。
    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2022-11-29
    • 2011-01-19
    • 2015-10-08
    相关资源
    最近更新 更多