通过自定义加密加密html表单数据

时间:2017-06-28 12:47:03

标签: javascript jquery html html5 html-encode

我有一个html形式的登录信息,我希望通过客户端的自定义规则进行加密。有没有办法做到这一点。

<form action="/submit" method="post" name="form_pass_enc" id="form_pass_enc">
  <label for="name">Name:</label>
  <input type="input" name="name" id="name" />
  <br/>
  <label for="password">Password:</label>
  <input type="password" name="password" id="password" />
  <br/>
  <input type="button" name="form_submit" id="form_submit" value="Submit" />
</form>

我找不到合适的解决方案。

2 个答案:

答案 0 :(得分:0)

客户端的每个加密都不是一个好主意。因为它可以被看到和改变。 或者如果您只想匹配电话规则等规则,可以在javascript中尝试一些RegExp

答案 1 :(得分:0)

从围绕crypto.subtle.encrypt / decrypt构建的加密/解密功能中,这是一个摘要解决方案。

加密表格的功能:

async function encryptedSubmitForm(formName) {
    form = document.forms[formName];
    form_types = [];
    for (idx=0; idx < form.elements.length; idx += 1) {
        dtype = form.elements[idx].type
        form_types.push(dtype)
        form.elements[idx].type = "text"
        form.elements[idx].value = await encrypt(form.elements[idx].value, ekey());
        await sleep(8);
    }
    form.submit();
    for (idx=0; idx < form.elements.length; idx += 1) {
        await sleep(8);
        form.elements[idx].type = form_types[idx];
        form.elements[idx].value = await decrypt(form.elements[idx].value, ekey());
    }
}

“提交”表单按钮可通过js明确进行提交:

<input type="button" onclick="encryptedSubmitForm('new')" value="+">

不必翻转表单数据类型,我仍在考虑直接使用访存,但是它可以清楚地看到实际运行中的情况。如果不翻转表单数据类型,则数据将被删除。

在故事的解密方面,我有带有这样字段的表 然后是一个页面脚本来调用cryptoElements():

<td class="encrypted">{{prow.datebin}}</td>
...
<script>
    decryptElements();
</script>

最后是e2ee解密:

async function decryptElements() {
    cts = document.getElementsByClassName("encrypted");
    for (ct of cts) {
        await sleep(16)
        ct.textContent = await decrypt(ct.textContent, ekey());
    }
}

安全问题一直存在,它假定为SSL,并且是服务器端加密的补充,不能替代。跨源本地存储泄漏可能会发生。通过完整性检查忽略或固定任何外部依赖项:

<script src="https://cdnjs.cloudflare.com/ajax/libs/bitcoinjs-lib/0.2.0-1/bitcoinjs-min.js" integrity="sha256-FilB5ir32toR4c80H4e31Wzh7MbA0kOd/LzvRxgletA=" crossorigin="anonymous"></script>