如何在BusinessOne中转义来自用户的字符串?我已经看到了一些似乎对SQL注入感兴趣的例子(在官方样本中!):
gbak -b -service remote_fb_ip:service_mgr absolute_path_to_db_file absolute_path_to_backupfile -user SYSDBA -pass masterkey
有没有办法通过简单的SQL查询(没有存储过程)来避免SQL注入?
答案 0 :(得分:0)
不幸的是,DI-API不提供预备语句,因此您需要手动保护输入。研究如何做到这一点包含在How to escape value in MSSQL server问题中:
在阅读New SQL Truncation Attacks And How To Avoid Them后,似乎 足以使用
[
使用]
转义标识符(并将'
的每次出现加倍)和值'
(再次将public static String identifier(final CharSequence identifier) { final int length = identifier.length(); StringBuilder sb = new StringBuilder(2 + length * 2); sb.append('['); for (int i = 0; i < length; ++i) { char c = identifier.charAt(i); if (']' == c) { sb.append(']'); } sb.append(c); } sb.append(']'); return sb.toString(); }
)的每次出现加倍。尽管如此,对一个关注正确逃避MSSQL的库的提示仍然不错。
我正在使用以下Java代码来转义标识符和值(移植到不同的语言应该是微不足道的):
public static String value(final CharSequence value) {
final int length = value.length();
StringBuilder sb = new StringBuilder(2 + length * 2);
sb.append('\'');
for (int i = 0; i < length; ++i) {
char c = value.charAt(i);
if ('\'' == c) {
sb.append('\'');
}
sb.append(c);
}
sb.append('\'');
return sb.toString();
}
<div id="wrap">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
<li><a href="#">Link 6</a></li>
<li><a href="#">Link 7</a></li>
<li><a href="#">Link 8</a></li>
<li><a href="#">Link 9</a></li>
</ul>
</div>