日期:2014-05-18  浏览次数:20576 次

关于特殊字符提交到数据库的问题
关于特殊符号提交到数据库的问题:在文本框中输入的特殊字符串如 " <input> ", "## ", "&& "等,在向数据库提交的过程中,总是提示存在安全隐患。
这个问题大家都是怎么解决的?
有没有标准的转移字符集之类的可以参考
大家都来顶吧

------解决方案--------------------
是不是报 "从客户端(******)中检测到有潜在危险的 Request.Form 值。 "这个错哦?
如果是这个在页面的page指令里加上:validateRequest= "false "就OK
------解决方案--------------------
去掉这个提示可以用楼上的法子,不过这些输入最好还是HtmlEncode()编码一下,因为这些字符确实会带来麻烦,比如脚本攻击
------解决方案--------------------
操作数据库一般使用SqlParameter的方式
不要自己拼接SQL文
------解决方案--------------------
SQL里面有转译字符,用转译字符可以的

但是我也推荐用SqlParameter,用String 或者 StringBuilder拼出来的SQL有些脆弱!不健壮!
------解决方案--------------------
操作数据库一般使用SqlParameter的方式 不要自己拼接SQL文 ===> 同意
------解决方案--------------------
using storedprocedure~~
------解决方案--------------------
拼字符串是VB/ASP年代的东西

现在早就应该采用底层框架做到全参数输入了
------解决方案--------------------
sbqcel(空空儿) ( ) 信誉:98
shalen520(Love will keep us alive) ( ) 信誉:100
说得对,不过你自己也可以写个函数校验一下或者过滤一下
------解决方案--------------------
validateRequest= "false "
HtmlEncode()
------解决方案--------------------
如果你要允许用户提交HTML,例如你的网站有HTML编辑器,那就要将validateRequest设置为false。至于存放如数据库中,这是没有任何威胁的,只要你用ADO.NET通过parameter的方法作为string传入,绝对不会构成SQL注入漏洞。

所谓的威胁是指对其他用户的威胁,而不是指直接对你的服务器的威胁,当然这可以构成间接威胁。例如用户提交的HTML当中包含 <script> </script> ,那么其他人浏览他发表的信息时也就会执行这段script,那就有潜在的危险了。如果是管理员浏览这段信息,而script执行的操作是盗取管理员有关的cookies,那就威胁到网站本身了。因此你应该对HTML进行适当过滤。
------解决方案--------------------
SqlParameter举个例子
-------------------------
public int Add(object obj)
{
Model.User user = (Model.User)obj;
StringBuilder strSql = new StringBuilder();
strSql.Append( "insert into User Values( ");
strSql.Append( "@Username,@Pwd,@Email,@Gender,@Born,@Country,@Provinc,@City, ");
strSql.Append( "@Address,@Phone,@Mobile,@Hobby,@Consume,@GradeID,@LastLoginDate, ");
strSql.Append( "@LastLeaveDate,@LoginCount,@RegDate,@RegIP,@IsDeleted) ");
SqlParameter[] parameters = {
new SqlParameter( "@Username ",SqlDbType.NVarChar),
new SqlParameter( "@Pwd ",SqlDbType.NVarChar),
new SqlParameter( "@Email ",SqlDbType.NVarChar),
new SqlParameter( "@Gender ",SqlDbType.NVarChar),
new SqlParameter( "@Born ",SqlDbType.DateTime),
new SqlParameter( "@Country ",SqlDbType.NVarChar),
new SqlParameter( "@Provinc ",SqlDbType.NVarChar),
new SqlParameter( "@City ",SqlDbType.NVarChar),
new SqlParameter( "@Address ",SqlDbType.NVarChar),
new SqlParameter( "@Phone ",SqlDbType.NVarChar),
new SqlParameter( "@Mobile ",SqlDbType.NVarChar),
new SqlParameter( "@Hobby ",SqlDbType.NVarChar),
new SqlParameter( "@Consume ",SqlDbType.Decimal),
new SqlParameter( "@GradeID ",SqlDbType.Int),
new SqlParameter( "@LastLoginDate ",SqlDbType.DateTime),
new SqlParameter( "@LastLeaveDate ",SqlDbType.DateTime),
new SqlParameter( "@LoginCount ",SqlDbType.Int),