请教关于asp.net的几个问题!(俩页面传值,正则,防注入)

情傷 2011-03-13 12:46:59
问题一:页面A中有文本框,点击提交按钮后,跳转到B页面,其中B页面也有文本框,怎样将A页面中文本框的值传入B页面中的文本框;
问题二:用Fckeditor控件后台添加了多张图片,怎样在页面中取值的时候从这几个图片中取出一个,利用正则表达式,或者其他,将图片的src取出来,使概述页面中只显示一个图片;其中FCKEditor控件上传图片的格式为:
<input type="image" height="480" width="640" src="/XXX/XXX.jpg" />
问题三:网站已经做好怎样对网站进行防注入,前台主要有两个页面有文本框可供用户提交数据,怎样对敏感字符进行过滤。
...全文
183 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
情傷 2011-03-16
  • 打赏
  • 举报
回复
问题二详细:后台使用的是FCKEditor控件,在里面添加了文字,也添加了图片,现在要从这里面获取出一张图片的路径。数据库里面得到的FCKEditor控件上传的图片格式为:
<input type="image" height="480" width="640" src="/XXX/XXX.jpg" />
比如一段文字:
<p>asdafaadffa</p><input type="image" height="480" width="640" src="/XXX/XXX.jpg" />
<div>adadfadadasdf<div><input type="image" height="480" width="640" src="/XXX/XXX.jpg" />
劳而无功dfadfadfadfadfadf

现在要从这段文字中取出一个图片的路径。
问怎样取?
strife013 2011-03-15
  • 打赏
  • 举报
回复
问题二,那个控件应该有什么属性可以获取选中的图片吧
情傷 2011-03-15
  • 打赏
  • 举报
回复
再弱弱的问一下,我DAL层里那样写,能防注入吗?
phuai007 2011-03-15
  • 打赏
  • 举报
回复
关于sql防注入这点,我以前也一直纠结怎么过滤,后来最终还是用了参数化查询...强烈建议用这个
情傷 2011-03-15
  • 打赏
  • 举报
回复
加分求问题二的解答!!!先感谢各位了!
Sampson890727 2011-03-15
  • 打赏
  • 举报
回复
第一:A.aspx?str="值" (是TextBox1.text)的值;
B页面接收的时候stirng btext= request.QueryString("str") 然后将textboxB。text=btext;
第二:string URL = @"((http|https):(\/\/|\\\\){1}((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*\/)((\S)+[.]{1}(gif|jpg|jpeg|png|bmp)))";
第三:sql注入主要是通过sql语句漏洞进行攻击,所以在给sql语句传参时,建议LZ用Sqlparamets赋值参数值,这样就不用在引用反注入类。使用也比较方便
情傷 2011-03-15
  • 打赏
  • 举报
回复
我上面那样写可以吗?
lchy110 2011-03-15
  • 打赏
  • 举报
回复
你用参数化的话 能防SQL注入
子夜__ 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhengwei804 的回复:]

补充一下,A页面有四个文本框,两个是时间,一个姓名,一个电话,用URL传参是不是不好?
用Session的话好像也不是很好!
关于楼上问题三的解答,不是很懂,
protected bool IsM(string InText)
{
string word = @"";
if (InText == null)
return false;
if (Regex.IsMa……
[/Quote]

多个参数 URL一样传用& 加密解密就行了

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

/// <summary>
/// 加密字符
/// </summary>
/// <param name=pToEncrypt>加密字符串</param>
/// <param name=skey>加密密钥</param>
/// <returns>返回加密</returns>
public class DescMD5
{
public static string skey = "abcdefgh";

public string Skey
{
get { return skey; }
set { skey = value; }
}


/// <summary>
/// 加密函数
/// </summary>
/// <param name="pToEncrypt"></param>
/// <returns></returns>
public string EnCrypt(string pToEncrypt)
{
//访问数据加密标准(DES)算法的加密服务提供程序 (CSP) 版本的包装对象
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(skey);//建立加密对象的密钥和偏移量
des.IV = ASCIIEncoding.ASCII.GetBytes(skey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
byte[] inputbyteArray = Encoding.Default.GetBytes(pToEncrypt);//把字符串放到byte数组中
MemoryStream ms = new MemoryStream();//创建其支持存储区为内存的流 

CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputbyteArray, 0, inputbyteArray.Length);
cs.FlushFinalBlock();//上面已经完成了把加密后的结果放到内存中去


StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);


}
return ret.ToString();



}



/// <summary>
/// 解密ESC函数
/// </summary>
/// <param name="pToDecrypt">被解密的字符串</param>
/// <param name="sKey">密钥(只支持8个字节的密钥,同前面的加密密钥相同)</param>
/// <returns>返回被解密的字符串</returns>

public string DeCrypt(string pToDecrypt)
{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte []inputbyteArray=new byte[pToDecrypt.Length/2];
for (int i = 0; i < pToDecrypt.Length / 2; i++)
{
int x = Convert.ToInt32(pToDecrypt.Substring(i * 2, 2), 16);

inputbyteArray[i] = (byte)x;

}
des.Key = ASCIIEncoding.ASCII.GetBytes(skey);
des.IV = ASCIIEncoding.ASCII.GetBytes(skey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputbyteArray, 0, inputbyteArray.Length);
cs.FlushFinalBlock();


return System.Text.Encoding.Default.GetString(ms.ToArray());

}

public DescMD5() { }



}
情傷 2011-03-13
  • 打赏
  • 举报
回复
标准的参数化?
string sql = "insert into messages values(@id,@title,@name,@telephone,@address,@email,@content,@adminreply,@messagedate,@replydate)";
MySqlParameter[] paras ={
new MySqlParameter("@id",null),
new MySqlParameter("@title",message.MessageTitle),
new MySqlParameter("@name",message.CustomerName),
new MySqlParameter("@telephone",message.CustomerTelephone),
new MySqlParameter("@address",message.CustomerAddress),
new MySqlParameter("@email",message.Email),
new MySqlParameter("@content",message.Content),
new MySqlParameter("@adminreply",message.AdminReply),
new MySqlParameter("@messagedate",message.MessageDate),
new MySqlParameter("@replydate",message.ReplyDate)
};
return DBHelper.ExecuteNonQuery(sql, paras);
这样是参数化吧?这样可以避免注入?
winner2050 2011-03-13
  • 打赏
  • 举报
回复
传递值,经常用url传递。安全不安全跟url传递无关,只跟程序员的水平有关。
网上各种支付全部都是url传递的。

现在不用纠结防注入了,用标准的参数化操作数据库的代码就得了。
情傷 2011-03-13
  • 打赏
  • 举报
回复
补充一下,A页面有四个文本框,两个是时间,一个姓名,一个电话,用URL传参是不是不好?
用Session的话好像也不是很好!
关于楼上问题三的解答,不是很懂,
protected bool IsM(string InText)
{
string word = @"";
if (InText == null)
return false;
if (Regex.IsMatch(InText,word))
return true;
return false;
}
Regex.Replace
都过滤哪些内容了呢?Regex.Replace是干什么的???
子夜__ 2011-03-13
  • 打赏
  • 举报
回复
问题1 可以用Session来存它的值 Session["str"]=TextBox1.Text;(A中的文本框)
到B页面中TextBox2.Text=Session["str"].ToString();
第二种解决方案 A.aspx?str="值" (是TextBox1.text)的值;B页面接收的时候request.QueryString("str")

问题二 Regex reg = new Regex(@"(?is)<input[^>]*?scr=(['""\s]?)([^'""\s]+)\1[^>]*?>");
MatchCollection match = reg.Matches(str);
foreach (Match m in match)
{
Response.Write(m.Groups[2].Value + "<br/>");
}
可能有点问题 正则不是很熟。

问题三 过滤非法字符
void Application_BeginRequest(object sender, EventArgs e)
{
for (int i=0; i < Request.Form.Count;i++)
{
if (Request.Form[i].ToString() == "__VIEWSTATE") continue;
if (IsM(Request.Form[i].ToString()))
{
Response.Write("您提交的内容中含有非法字符.");
Response.End();
}

}
}
protected bool IsM(string InText)
{
string word = @"";
if (InText == null)
return false;
if (Regex.IsMatch(InText,word))
return true;
return false;
}
Regex.Replace

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧