我的主要问题是,当有人从网络上复制粘贴文本(如Google表格中的整个单元格)时,此字符串提交到mysql数据库<style type="text/css"><!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--></style><span style="font-size: 10pt; font-family: Arial;" data-sheets-value="{
重新加载此代码后,将更改页面上的HTML表结构
我尝试创建一个“检查约束”,以仅允许该列中的数字,字母,空格和连字符其他所有特殊字符(〜!@#$%^&*()+ {[}] :;'“ \ | ?> <)在行更新时需要忽略或删除
我尝试了以下代码,但无法阻止HTML代码进入数据库
ALTER TABLE Table_Name
ADD CONSTRAINT ck_No_Special_Characters
CHECK (Column_Name NOT LIKE '%[^A-Z0-9]%')
如果无法控制表单输入框,如何在MySQL中解决此问题?
答案 0 :(得分:0)
您 从不 可以控制表单输入框。如果您曾经假设过,请重新考虑这些解决方案,因为:您永远不能信任来自一个/客户端的数据。在StackOverflow上,至少有一半的人知道如何操作表单,但是我们无法更改服务器代码。
在将其输入数据库之前,要进行消毒。您可以清理并插入它,或者检查它是否干净(如果没有抛出错误)。我在PHP中做了一个简单的例子:
$cleanVariable = preg_replace("/[^A-Z0-9]/s", '', $variable);
// OR:
if( !preg_match("/^[A-Z0-9]$/s", $variable) ){
throw new Exception("does not match");
}
您可能想使用strtoupper()使其始终大写。
完成服务器端后,可以使客户端对用户更美观。
<!-- Inline isnt preferred, but for demo: -->
<input onChange="cleanThisInput(this.value)" />