【发布时间】:2008-11-19 09:29:37
【问题描述】:
每次将网页中的任何数据插入数据库时,是否应该使用 textbox.text.Trim() 函数?
我只是有使用修剪功能的习惯?它会以任何方式影响性能吗?我应该每次使用还是只在需要时使用?
【问题讨论】:
每次将网页中的任何数据插入数据库时,是否应该使用 textbox.text.Trim() 函数?
我只是有使用修剪功能的习惯?它会以任何方式影响性能吗?我应该每次使用还是只在需要时使用?
【问题讨论】:
我已经看到了许多意外添加到文本字段末尾的空格的问题(例如神秘地不起作用的登录)。因此,将 trim() 大多数文本字段输入作为标准做法一点也不坏。
我认为 trim() 对性能的影响绝对可以忽略不计,除非可能是流量超高的网站。
【讨论】:
您应该在数据进入应用程序时(从提交的表单)修剪数据,而不是在将数据放入数据库之前。这是将数据转换为受控格式的验证步骤,而不是安全存储在数据库中的转义步骤。 (*)
此时您还应该删除控制字符和其他任何会导致您的应用程序出现问题的内容。例如,想象一下带有换行符或空字节的用户名可能导致的困难(和潜在的安全问题)。典型的浏览器 UI 可能不允许输入这些字符,但这并不能阻止攻击者提交它们。一些表单阅读库可能会为您解决这个问题,但大多数不会。
并非所有东西都需要修剪。例如,像我现在输入的大文本字段可能有正当理由在开头和/或结尾处有空格。但是对于任何与它相关的逻辑都是值得的,尤其是像用户名这样的东西。
*:存在一个与未修剪空格有关的数据库问题:许多数据库会默默地修剪尾随空格,并意外匹配带有任意数量尾随空格的字符串。不要期望从数据库中取回尾随空格,除非它是一个 BLOB 列,并且再次,在使用匹配用户名之类的逻辑进行任何操作之前进行修剪。
【讨论】:
使用 trim 并确保创建一个函数来消除任何潜在的 sql 中毒攻击。
php为你提供
mysql_real_escape_string();
【讨论】: