相关疑难解决方法(0)

htmlspecialchars和mysql_real_escape_string能保证我的PHP代码免于注入吗?

今天早些时候,有人询问有关网络应用中输入验证策略的问题.

在撰写本文时,最重要的答案建议PHP只使用htmlspecialcharsmysql_real_escape_string.

我的问题是:这总是足够的吗?还有更多我们应该知道的吗?这些功能在哪里崩溃?

php security xss sql-injection

115
推荐指数
2
解决办法
6万
查看次数

当你真的不能使用参数时,如何转义SQL查询的字符串

我已经看过这个问题了很多次,但是没有看到一个很好的例子,当参数化查询真的不是一个选项时...但我认为我有一个.

我正在使用Cisco Call Manager AXL API.它的后端是一个Informix DB.通常,只要有可能,我使用提供的SOAP方法来获取结果,因为我使用WSDL创建的接口类并在实际对象属性中传递参数,因此它负责通过SOAP库进行必要的转义.

然而:

我必须对数据库使用直接SQL调用,并且API提供了一种方法,您可以传入SQL查询(作为字符串)并获取结果行.不幸的是,这种方法不能为参数化查询提供任何便利.所以,是的,我实际上需要自己逃避.

那么,当然我可以制作自己的正则表达式,但是A:我很容易错过一些东西,而且B:真的吗?这没有实用工具类?我可以以某种方式使用SQL参数化引擎来吐出转义的查询吗?显然我知道你必须处理',但我已经阅读了关于退格字符注入方法,我确信还有其他我还不知道的......当然其他人已经编写了一个非常安全的版本?

范围:

  • 我对使用现成库的解决方案感兴趣,最好是内置库.
  • 如果我必须自己编写,我可以使用上面和其他地方的链接中的示例,但我真的不想写自己的,所以让我们试着不要告诉我如何做到这一点.
  • 不,我无法直接连接到Informix数据库并使用带参数化查询支持的Informix驱动程序.这将是一个很好的答案,但在这种情况下它被排除在外.

.net c# asp.net cisco-axl

6
推荐指数
1
解决办法
1402
查看次数

单引号是否在PHP中自动转义?那么清洁需要什么?

我正在阅读网络安全性,一个明显的主题是SQL注入.我正在尝试建立一个基本的php页面,我可以在其中执行sql注入(它是一个本地服务器).但是,似乎我的代码(或服务器)自动转义单引号.这是一个新标准还是我的服务器上激活了一个我不知道的设置?是否需要清理输入?

这是我的服务器端代码的示例:

$foo = $_POST['foo'];
$sql = "SELECT * FROM bar WHERE foo='" . $foo . "'";

connectoTo("database");
query($sql);
Run Code Online (Sandbox Code Playgroud)

其中connectTo()连接到数据库服务器并选择数据库,query()是执行查询时使用的常用过程.什么都没有清洁.但是,当我发送时

$_POST['foo'] = "' OR 1=1 #" 
Run Code Online (Sandbox Code Playgroud)

php页面收到这个

$_POST['foo'] = "\' OR 1=1 #"
Run Code Online (Sandbox Code Playgroud)

所以foo已经逃脱了?这与$ _GET相同.

有什么想法吗?我们不再需要清理用户输入了吗?

干杯

埃里克

php sql quotes escaping code-injection

3
推荐指数
2
解决办法
3014
查看次数

清理请求以防止SQL注入攻击

我们继承了一个旧网站,其中包含近2000个不同的手工构建的SQL字符串,直接从httprequests中获取变量.该站点经常受到SQL注入攻击的攻击.显然,这个站点应该使用SQL参数进行编码,以避免这种安全噩梦,但是由于涉及的工作量有所改变,我们正在寻找另一种"清理"传入请求的方法.

主要清洁功能: -

Public Function myRequest(ByRef Request As HttpRequest, ByVal param As String) As String
        Return CleanRequest(Request(param))
End Function

Public Function CleanRequest(ByVal requestString As String) As String
        Dim badChars() As String = {"select", "drop", ";", "--", "insert", "delete", "xp_", "update"}
        Dim newChars As String = requestString

        For i = 0 To UBound(badChars)
            newChars = Replace(newChars, badChars(i), "", 1, -1, vbTextCompare)
        Next

        CleanRequest = Replace(newChars, "'", "''")
End Function
Run Code Online (Sandbox Code Playgroud)

这样称呼: -

Dim details As DataSet

detailsSQL = "select * from mytable …
Run Code Online (Sandbox Code Playgroud)

.net vb.net sql-injection request httprequest

2
推荐指数
1
解决办法
2225
查看次数