我的知识很浅,因为我只是一个业余爱好学习PHP/HTML/MySQL,所以请温文尔雅。
ESCAPE旨在帮助程序员防止SQL注入。是的,程序员应该更聪明,只需要addslashes(),但考虑到最近的LulzSec愚蠢,我认为W3C实现一种新的表单输入方法将是一个很好的举措,使程序员更容易实现安全性。
我只知道PHP,所以我将谈谈PHP。基本上,以前我们有
$safeTagSearch = addslashes($_GET["tagSearchRaw"]);我们现在将拥有
$safeTagSearch = $_ESCAPE["tagSearchRaw"]);如果为tagSearchRaw = "cats in hats",则它将被斜杠为☃"cats in hats☃"。( unicode雪人将演示如何使用不同的转义序列来处理不同的语言。)
$_ESCAPE代码将把☃识别为表单转义字符,并在将\"cats in hats\"传递给$safeTagSearch之前进行少量处理。
这真的可行吗?
发布于 2011-06-23 04:23:00
我认为这根本不可行,因为它要求web编程语言知道您正在使用的特定SQL语法。该功能是数据库提供程序(如ODBC、OLEDB、SQL Server Native、Jet等)的域,以便能够将所有输入转换为在数据库中完成工作所必需的特定于SQL的变体语法,而不会出现错误和SQL注入。
解决办法不是给web开发人员一个拐杖,因为他们滥用了连接的SQL语句,而是让web开发人员在命令上使用形式参数(或者至少在即席查询中使用参数占位符,如? ),而不是仅仅将SQL片段和参数字符串挤在一起,希望它能正常工作。
如果您提供$_ESCAPE来治疗那些愚蠢地使用$_GET的人,那么您会因为愚蠢地使用它而引入其他问题,比如在数据库中存储已经两次转义的字符串(oops)。这只会使问题变得混乱。
这带来的另一个问题是不知道您正在使用的字符串是安全的还是不安全的。我支持的一种解决方案是构造强类型的String对象,以指示它是哪种类型的字符串(HTMLString、UnsafeString、SQLString等)。
然后,如果您尝试执行类似于<SQLStringFragment> + <UnescapedString>的操作,那么在没有首先将两种不同类型的字符串转换为相同类型的情况下,尝试连接两种不同类型的字符串将会出现编译时或运行时错误。
DB库可以扩展为提供转换实用程序,如SQLStringFromParameterValue,它可以接受未转义的字符串,并根据当前连接的属性返回转义的字符串。
发布于 2011-06-23 04:25:04
不可行。数据库安全性很复杂,而且通常是特定于数据库类型的。简单地添加斜杠有助于转义引号,是的,但对XSS (跨站点脚本)攻击没有任何帮助。
然后,如果您查看XSS问题,您会意识到有时您希望允许某些HTML,而不允许其他HTML。
转义和净化值是一个比您想象的复杂得多的问题。
https://stackoverflow.com/questions/6445924
复制相似问题