我接管了一个客户端有一些烦人的问题的项目。 他们有一个下拉菜单,可以将选定的文本放入t-sql查询中进行自动回复。任何具有撇号的值由于未被转义而导致查询错误在asp.net autopostback之前更改下拉菜单项的文本
我没有编译代码的访问权限,但希望能够在发布替换撇号之前对选定的已更改内容编写快速的创可贴修复到一个双撇号来逃避它,因为它进入查询。
我写了一个javscript ddl.change函数,用于更改文本。
尽管撇号确实变成了两个,但这并不起作用。我想知道是否有人可以帮助理解为什么。
我对导致问题的场景有两种想法。
在autopostback上,它会在javascript更改函数之前触发,因此在javascript更改之前传递原始值以修改它。
服务器端代码只理解它最初放置在下拉菜单中的内容,因此无论我操作多少客户端代码,它只会看到它放置的内容?
任何人都可以确认这些场景吗? 帮助将不胜感激!
编辑:我逆向工程的代码中,是它非常丑陋的(和SQL注射用),但不是我的,我不能修改它
C#代码
protected void ddls_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.ddls.SelectedIndex == 0)
{
this.pnlA.Visible = false;
}
else
{
this.pnlA.Visible = true;
string text = Common.GetSql("~/Sql/" + this._Conn + "/PropertyAddressReverseSearch.sql", false, true).Split(new char[]
{
Conversions.ToChar(this._Delimiter)
})[4];
text = string.Concat(new string[]
{
"SELECT * FROM (",
text,
") a WHERE StreetName='",
this.ddls.SelectedItem.Text,
"' "
});
this.Bind(this.ddla, text);
this.ddla.Items.Insert(0, new ListItem("I'm not sure of the house number...", Conversions.ToString(-1)));
this.ddla.Items.Insert(0, new ListItem("", Conversions.ToString(0)));
this.map.Visible = false;
}
}
Javscript +控制
<asp:dropdown runat="server" id="ddls" autopostback="true">
<script type="javascript/text">
$(document).ready(function() {
$("select[id$='adsearch_ddls']").change(function() {
var ddlsValue = $("select[id$='adsearch_ddls'] option:selected").text();
ddlsValue = ddlsValue.replace(/'/g,"\'\'");
$("select[id$='adsearch_ddls'] option:selected").text(ddlsValue);
return false;
});
});
</script>
根据** how **定义自定义事件侦听器,在回发之前可能会或可能不会触发它。另外,你提到改变'text' - 提交给服务器的值是'value'。也许你正在改变错误的东西。你能显示你的JS代码吗? – Ian
希望我的编辑能够提供帮助。在选定的索引更改中调用服务器端代码,将文本放入查询中而不是值 – Cyassin