fix: 支付宝表单添加 HTML 转义,防止 JSON 双引号破坏属性
This commit is contained in:
@@ -170,17 +170,23 @@ fn build_alipay_form_html(
|
|||||||
|
|
||||||
let sign = rsa2_sign(&sign_source, &config.private_key)?;
|
let sign = rsa2_sign(&sign_source, &config.private_key)?;
|
||||||
|
|
||||||
// 生成自动提交的表单 HTML(使用原始值,浏览器会自动 URL 编码)
|
// 生成自动提交的表单 HTML(HTML 转义防止特殊字符破坏属性)
|
||||||
|
fn h(s: &str) -> String {
|
||||||
|
s.replace('&', "&")
|
||||||
|
.replace('"', """)
|
||||||
|
.replace('<', "<")
|
||||||
|
.replace('>', ">")
|
||||||
|
}
|
||||||
let mut form_fields = String::new();
|
let mut form_fields = String::new();
|
||||||
for (k, v) in ¶ms {
|
for (k, v) in ¶ms {
|
||||||
form_fields.push_str(&format!(
|
form_fields.push_str(&format!(
|
||||||
r#"<input type="hidden" name="{}" value="{}" />"#,
|
r#"<input type="hidden" name="{}" value="{}" />"#,
|
||||||
k, v
|
h(k), h(v)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
form_fields.push_str(&format!(
|
form_fields.push_str(&format!(
|
||||||
r#"<input type="hidden" name="sign" value="{}" />"#,
|
r#"<input type="hidden" name="sign" value="{}" />"#,
|
||||||
&sign
|
h(&sign)
|
||||||
));
|
));
|
||||||
|
|
||||||
let html = format!(
|
let html = format!(
|
||||||
|
|||||||
Reference in New Issue
Block a user