diff --git a/src/handlers/payment.rs b/src/handlers/payment.rs index a21dd0d..7a88fe4 100644 --- a/src/handlers/payment.rs +++ b/src/handlers/payment.rs @@ -170,17 +170,23 @@ fn build_alipay_form_html( 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(); for (k, v) in ¶ms { form_fields.push_str(&format!( r#""#, - k, v + h(k), h(v) )); } form_fields.push_str(&format!( r#""#, - &sign + h(&sign) )); let html = format!(