我试图保护自己免受sql注入并使用:
mysql_real_escape_string($string);
Run Code Online (Sandbox Code Playgroud)
发布HTML时,它看起来像这样:
<span class="\"className\"">
<p class="\"pClass\"" id="\"pId\""></p>
</span>
Run Code Online (Sandbox Code Playgroud)
我不确定real_escape_string添加了多少其他变体,所以不想只替换一些并错过其他...我如何将其"解码"回到格式正确的HTML中,例如:
html_entity_decode(stripslashes($string));
Run Code Online (Sandbox Code Playgroud) 最初我使用mysql_connect和mysql_query来做事.然后我学习了SQL注入,所以我试图学习如何使用预处理语句.我理解PDO类的准备和执行函数如何有助于防止SQL注入.
但是,只有在用户输入存储到数据库中时才需要准备语句.还是可以继续使用mysql_num_rows,因为我真的没有冒这个功能被黑客入侵的风险吗?或者使用预准备语句来执行此操作更安全吗?我是否应该为涉及使用mysql的所有内容使用预准备语句?为什么?
我真的很感激任何答案和反馈.谢谢.
我们都知道准备好的语句是抵御SQL注入攻击的最好方法之一.使用"IN"子句创建预准备语句的最佳方法是什么.是否有一种简单的方法可以使用未指定数量的值来执行此操作?以下面的查询为例.
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
目前我正在使用一个循环覆盖我的可能值来构建一个字符串,如.
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (@IDVAL_1,@IDVAL_2,@IDVAL_3)
Run Code Online (Sandbox Code Playgroud)
是否可以使用只传递数组作为查询参数的值并使用如下查询?
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (@IDArray)
Run Code Online (Sandbox Code Playgroud)
如果重要的是我在VB.Net中使用SQL Server 2000
t-sql vb.net language-features sql-injection sql-server-2008
我在ASP.NET MVC应用程序中有一个表,我希望它是可排序的(服务器端)并且可以使用AJAX过滤.我希望它在其他地方使用起来相当容易,并且不想将排序和过滤硬编码到查询表达式中,所以我找到了一种动态构建表达式的方法,我找到的最好的方法是使用Dynamic LINQ .
来自以下URL的用户输入直接插入到动态Where或OrderBy中.
/Orders?sortby=OrderID&order=desc&CustomerName=Microsoft
Run Code Online (Sandbox Code Playgroud)
这将导致两个表达式:
OrderBy("OrderID descending")
Where(@"CustomerName.Contains(""Microsoft"")")
Run Code Online (Sandbox Code Playgroud)
虽然我明白它不会直接在数据库中抛出,并且在这里插入直接的SQL将无法工作,因为它无法反映到属性中,并且它是类型安全的所有,我想知道是否有人比我更有创意无论如何都可以找到一种方法来利用它.我能想到的一个漏洞是可以对表中不可见的属性进行排序/过滤,但这并不是有害的,因为它们仍然无法显示,并且可以通过散列来防止它.
我允许直接用户输入的唯一方法是使用OrderBy和Where.
只是确定,谢谢:)
我看过几篇关于L2E是否容易受到SQL注入影响的文章.
来自MSDN:
尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响.
这是否意味着存在可能有效的"非传统"攻击? 本文有一个非参数化查询的例子 - 可以安全地假设,如果通过变量传入用户提供的数据,它将被参数化吗?
如果我做:
from foo in ctx.Bar where foo.Field = userSuppliedString select foo;
Run Code Online (Sandbox Code Playgroud)
我安全吗?
由于电子邮件地址有很多有效字符,是否有任何有效的电子邮件地址本身可以是XSS攻击或SQL注入?我在网上找不到任何相关信息.
电子邮件地址的本地部分可以使用以下任何ASCII字符:
- 大写和小写英文字母(a-z,A-Z)
- 数字0到9
- 人物!#$%&'*+ - /=?^ _` {| }〜
- 性格.(点,句号,句号),条件是它不是最后一个字符,并且还提供它不连续出现两次或多次(例如John..Doe @ example.com).
http://en.wikipedia.org/wiki/E-mail_address#RFC_specification
我不是在问如何防止这些攻击(我已经在使用参数化查询和转义/ HTML净化器),这更像是一个概念验证.
首先想到的是'OR 1=1--@gmail.com,除了不允许空格.所有SQL注入都需要空格吗?
该脚本使用PHP,而DB则使用MySQL.这是脚本本身.
$unsafe_variable = $_GET["user-input"];
$sql=sprintf("INSERT INTO table (column) VALUES('%s')",$unsafe_variable);
mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)
有人说如果用户将;DROP TABLE blah;字符串分配给变量$ unsafe_variable,则会删除该表.
但我试过这个例子,
http://localhost/test.php?user-input=DROP%20TABLE%20my_table
Run Code Online (Sandbox Code Playgroud)
但它没有删除表,而是在表中插入了一个新行(;DROP TABLE blah;).
有人可以解释一下如何用sql注入来攻击这个脚本吗?
我想知道是否有可能只需my_sql_escape字符串整个$ _POST和$ _GET数组,所以你不会错过任何变量?
不知道如何测试它或我会自己.谢谢!
应该如何用phpunit php web应用程序测试xss + sql注入?我想找到输出xss +其他攻击的程序来测试我的应用程序表单.应该使用新的xss和其他新攻击随时更新此程序/服务.是否存在此类服务/程序,如果不是今天如何完成?如果可以,请举一些例子.
(我使用php 5.3 + zend framework + mysql)
编辑:
我询问测试!而不是阻止我也知道的技术.
谢谢,
优素福
请考虑以下代码段:
import MySQLdb
def get_data(id):
db = MySQLdb.connect(db='TEST')
cursor = db.cursor()
cursor.execute("SELECT * FROM TEST WHERE ID = '%s'" % id)
return cursor.fetchall()
print(get_data(1))
Run Code Online (Sandbox Code Playgroud)
代码中存在一个主要问题 - 它容易受到SQL注入攻击,因为查询不是通过DB API参数化的,而是通过字符串格式化构建的.如果以这种方式调用函数:
get_data("'; DROP TABLE TEST -- ")
Run Code Online (Sandbox Code Playgroud)
将执行以下查询:
SELECT * FROM TEST WHERE ID = ''; DROP TABLE TEST --
Run Code Online (Sandbox Code Playgroud)
现在,我的目标是分析项目中的代码并检测可能容易受到SQL注入攻击的所有位置.换句话说,查询是通过字符串格式构造的,而不是在单独的参数中传递查询参数.
在静态代码分析软件包的帮助下pylint,它是否可以静态解决pyflakes?
我知道sqlmap流行的渗透测试工具,但据我所知,它正在对抗Web资源,通过HTTP请求将其作为黑盒进行测试.
sql-injection ×10
php ×6
security ×3
mysql ×2
sql ×2
xss ×2
c# ×1
dynamic-linq ×1
html-encode ×1
linq ×1
phpunit ×1
python ×1
t-sql ×1
vb.net ×1