我接管了一個客戶端有一些煩人的問題的項目。 他們有一個下拉菜單,可以將選定的文本放入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