forms - 何时何地对用户输入进行编码?

标签 forms encoding coldfusion coldfusion-10 coldfusion-11

我目前正在将用户提交的数据存储到我的数据库中,这些数据已经编码如下:

<cfquery>
INSERT INTO dbo.MyTable (UserID, Comment)
VALUES
(
<cfqueryparam value="#FORM.UserID#" cfsqltype="cf_sql_integer"/>,
<cfqueryparam value="#EncodeForHTML(FORM.Comment)#" cfsqltype="cf_sql_nvarchar"/>
)
</cfquery>

显然这不是正确的方法,因为现在我在数据库表中转义了字符,这些字符仅对 HTML 输出有用,并且很难在 SQL Server 中执行搜索。

那么,如何确保在输入到达服务器之前对其应用 EncodeForHTML() ,然后 Canonicalize() 将接收到的数据存储在数据库?

最佳答案

当文本指向数据库时,减轻对数据库有害的文本:将其作为参数传递,而不是硬编码到 SQL 语句中,就像您在示例中所做的那样。如果不参数化您的 ID 值,您仍然会暴露自己。通常,只有 SQL 应该出现在您的 <cfquery> 中。的 SQL 字符串;任何数据值都应作为参数传递。

同样,降低用户提供的数据在您使用数据时可能暴露的风险。。不是当它进入存储时,而是当您实际使用它时。 encodeForHtml()仅适用于写入 HTML 的内容。如果它通过 URL 传递或在 JavaScript 中使用等,则没有任何帮助。针对这些问题有不同的缓解方法(分别为 urlEncodedFormat()encodeForJavaScript())。重点是您要根据使用情况来处理缓解措施,而不仅仅是一般性的。

如何确保完成此操作(您问这个)?嗯...您勤奋地编写代码,并有严格的代码审查和 QA 流程(QA 进行笔测试)。

关于forms - 何时何地对用户输入进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632221/

相关文章:

python - 清除 Django 中验证错误时的所有表单字段

mysql - 如何在 AngularJS 中为 ng-repeat 赋值?

java - 如何在java中正确读取阿拉伯数据集?

jquery-ui - 如何在 cfc 中用 Coldfusion 替换 AJAX 帖子

javascript - Ajax PHP 表单提交(包含图像和文本)

javascript - onSubmit 验证更改标签样式

java - 当我以 pdf 形式向占位符插入值时,如何设置 iText 的编码?

google-app-engine - 为整个应用程序设置 Python27 Google AppEngine 默认编码

regex - 如何在 Lucee 中模拟 Unicode JS 正则表达式

Java JDK 问题或其他问题