PDO 准备语句:我们需要逃逸吗?

发布于 2024-09-24 14:21:55 字数 514 浏览 2 评论 0原文

public function receiveDomainNames($keyword)
{
  try
  {
    $stmt = $this->_dbh->prepare("SELECT d.someField FROM domain d WHERE d.someField LIKE :keyword");
    $someField = '%'.$keyword.'%';

在这种情况下我们需要转义$keyword吗?

在php手册上我们可以读到:

如果应用程序专门使用准备好的语句,则开发人员可以 确保不会发生 SQL 注入 发生(但是,如果其他部分 查询正在建立 未转义的输入,SQL注入是 仍然有可能)。

您认为是这种情况吗?在这种情况下,是否建立了未转义的输入(没有对我们的 $keyword 参数进行事先处理)?

提前致谢, MEM

public function receiveDomainNames($keyword)
{
  try
  {
    $stmt = $this->_dbh->prepare("SELECT d.someField FROM domain d WHERE d.someField LIKE :keyword");
    $someField = '%'.$keyword.'%';

Do we need to escape $keyword on this case?

On php manual we can read:

If an application exclusively uses prepared statements, the developer can
be sure that no SQL injection will
occur (however, if other portions of
the query are being built up with
unescaped input, SQL injection is
still possible
).

Is this the case on your opinion, are, on this case, build up unescaped input (no prior treatment has been made to our $keyword parameter) ?

Thanks in advance,
MEM

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独留℉清风醉 2024-10-01 14:21:55

鉴于上述 SQL 语句,我认为 SQL 注入没有合理的可能性。

关于“其他部分”的警告将是一个 SQL 查询,如下所示:

$binds = array(":id"=>$_GET['id']);
$myPDO->prepare("SELECT {$_GET['columns']} FROM {$_GET{['table']} WHERE id = :id");
$statement = $myPDO->execute($binds);

该示例是其含义的最坏情况/明确示例,天真的有人可能会认为,因为他们逃避了 where 参数,所以一切都是安全的。

对于上面的示例,没有未转义的输入,因此您是安全的。

Given the above SQL statement, I see no rational possibility of a SQL injection.

What the warning about "other parts" would be a SQL query like:

$binds = array(":id"=>$_GET['id']);
$myPDO->prepare("SELECT {$_GET['columns']} FROM {$_GET{['table']} WHERE id = :id");
$statement = $myPDO->execute($binds);

The example is a worst case/explicit example of what they mean, that naively someone might think since they're escaping the where argument, that everything is safe.

With your example above, there is no un-escaped input so you're safe.

梦晓ヶ微光ヅ倾城 2024-10-01 14:21:55

如果应用程序专门使用准备好的语句,则开发人员
可以确定不会发生 SQL 注入(但是,如果其他
查询的部分是使用未转义的输入、SQL 构建的
注射仍然是可能的
)。

我认为您创建的变量不必转义,因为您知道它们在做什么。

仅转义从用户获取的内容,例如 $_COOKIE、$_POST、$_GET 和其他参数(例如 URL)。

If an application exclusively uses prepared statements, the developer
can be sure that no SQL injection will occur (however, if other
portions of the query are being built up with unescaped input, SQL
injection is still possible
).

I'd figure variables you create shouldn't have to be escaped because you know what they're doing.

Only escape content gotten from the user, such as $_COOKIE, $_POST, $_GET and other parameters such as the URL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文