이전 개발자 코드를 수정 중이며 업데이트 구문에서 매개 변수를 사용하지 않는 것으로 나타났습니다. 나는 주입에 대해 더 안전하도록 매개 변수를 사용하여 수정했으며 이제는 전혀 업데이트되지 않습니다. 이전 코드로 업데이트되었습니다. 코드는 잘 진행됩니다. 오류는 없지만 테이블을 업데이트하지는 않습니다. 디버깅 중 값이매개 변수가있는 SQLCommand가 더 이상 내 테이블을 업데이트하지 않습니다.
csharpa="Hello"
csharpb="Text"
csharpc="1"
으로 표시되는 경우
select * from table where sqlb="Text" and sqlc="1"
의 테이블을 확인 아직도 내가 기대하는 것처럼 안녕하세요으로 업데이트되지
sqla="Goodbye"
의 이전 값을가집니다.
코드 전에 :
string q = "update table set sqla='" +
csharpa + "' where sqlb='" + csharpb +
"' and sqlc=" + (string)HttpContext.Current.Session["csharpc"];
SqlConnection conn = new SqlConnection(connstr);
SqlCommand sda = new SqlCommand(q, conn);
conn.Open();
sda.ExecuteNonQuery();
conn.Close();
코드 후 :
string q = "update table set [email protected] where [email protected] and [email protected]";
필드가 문자열 인 경우 귀하의 DB를 자동으로 알 수
, 당신 때문에 돈 :
string q = "update table set sqla='@para' where sqlb='@parb' and [email protected]";
SqlConnection conn = new SqlConnection(connstr);
SqlCommand sda = new SqlCommand(q, conn);
sda.Parameters.AddWithValue("@para", csharpa);
sda.Parameters.AddWithValue("@parb", csharpb);
sda.Parameters.AddWithValue("@parc", (string)HttpContext.Current.Session["csharpc"]);
그러나 그게 효과가 있었는데, 하나의 잡았다. 단일 어포 스트로피와 같은 주사 공격을 일으킬 수있는 것들 중 하나를 입력하면 테이블을 업데이트하지 않습니다. 매개 변수가 이것들을 벗어날 정도로 똑똑하지 않은가? 먼저 몇 가지 이스케이프 시퀀스를 통해 실행해야합니까? –
@JohnWesleyGordon - 따옴표에서 벗어나서는 안됩니다. 아마도 다른 것이 문제일까요? 동일한 WHERE 절을 사용하여 SELECT 문을 실행하고 결과가 반환되는지 확인하려고합니다. –
그것은 내 자신의 어리 석음이었다. 아포 스트로피를 테스트 할 때 이전 버전을 사용했습니다. 매개 변수와 함께 작동하는지 확인했습니다. 모든 도움에 감사드립니다. –