我有一个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>
我找不到合适的解决方案。
答案 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>