- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有点糊涂了,PHP函数那么多,有的用这个,有的用那个。有些人使用:htmlspecialchars()
、htmlentities()
、strip_tags()
等
哪个是正确的,你们通常使用什么?
这是正确的吗(建议我一个更好的,如果有的话):
$var = mysql_real_escape_string(htmlentities($_POST['username']));
这条线可以防止MySQL注入(inject)和XSS攻击??
顺便说一句,除了XSS攻击和MySQL注入(inject),还有什么需要注意的吗?
编辑
总结:
如果我想向数据库中插入字符串,我不需要使用htmlentities
,只需使用mysql_real_escape_string
。显示数据的时候,用htmlentities()
,你们都是这个意思吗??
总结:
mysql_real_escape_string
插入数据库时使用htmlentities()
输出数据到网页时使用htmlspecialchars()
什么时候使用?strip_tags()
什么时候使用?addslashes()
什么时候使用?有人可以填问号吗?
最佳答案
mysql_real_escape_string
used when insert into databasehtmlentities()
used when outputting data into webpagehtmlspecialchars()
used when?strip_tags()
used when?addslashes()
used when?
htmlspecialchars
与htmlentities
大致相同.区别:字符编码。
两者都对控制字符进行编码,例如 <
, >
, &
等等用于打开标签等htmlentities
还编码来自其他语言的字符,如变音符号、欧元符号等。如果您的网站是 UTF,请使用 htmlspecialchars()
, 否则使用 htmlentities()
.
htmlspecialchars
/entities
对特殊字符进行编码,以便它们显示但不解释。 strip_tags
删除它们。
在实践中,这取决于您需要做什么。
例如:您编写了一个论坛,并为用户提供了一个文本字段,以便他们可以发布内容。恶意的只是尝试:
pictures of <a href="javascript:void(window.setInterval(function () {window.open('http://evil.example');}, 1000));">kittens</a> here
如果您什么都不做,链接就会显示出来,点击链接的受害者会收到很多弹出窗口。
如果您的输出是 htmlentity/htmlspecialchar,文本将按原样存在。如果你 strip_tag 它,它只是删除标签并显示它:
pictures of kittens here
有时您可能想要混合,在其中留下一些标签,例如 <b>
(strip_tags
可以在其中留下某些标签)。这也不安全,所以最好使用一些成熟的库来对抗 XSS。
引用old version of the PHP manual :
Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash () and NUL (the NULL byte).
An example use of addslashes() is when you're entering data into a database. For example, to insert the name O'reilly into a database, you will need to escape it. It's highly recommeneded to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using does't have an escape function and the DBMS uses \ to escape special chars, you can use this function.
current version措辞不同。
关于php - 如何防止PHP中的代码注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1205889/
我已阅读有关依赖注入(inject)的信息。然后来了 构造函数注入(inject), setter/getter 注入(inject) 二传手注入(inject) 接口(interface)注入(in
我正在研究依赖注入(inject)模式。我看过很多例子,其中一个典型的例子是使用 XxxService/XxxRepository 作为例子。但是在我看来,按照UML的概念,类XxxRepositor
我开始使用 Google Guice。 我有一个简单的问题: javax.inject 的 @Inject 注释和 com.google.inject 的 有什么区别@Inject 一个 ? 谢谢。
当使用构造函数注入(inject)工厂方法时,依赖的属性不会得到解析。但是,如果在解析依赖的组件之前解析了工厂方法,则一切都会按预期工作。此外,当仅使用属性注入(inject)或构造函数注入(inje
我有这样的事情: class Root { public Root(IDependency dep) {} } class Dependency:IDependency { p
听完Clean Code Talks ,我开始明白我们应该使用工厂来组合对象。因此,例如,如果 House有一个 Door和 Door有一个 DoorKnob , 在 HouseFactory我们创建
情况:我需要在一些 FooClass 中进行惰性依赖实例化,所以我通过 Injector类作为构造函数参数。 private final Injector m_injector; public Foo
在编写代码时,我们应该能够识别两大类对象: 注入(inject)剂 新品 http://www.loosecouplings.com/2011/01/how-to-write-testable-cod
这个问题是关于 Unity Container 的,但我想它适用于任何依赖容器。 我有两个具有循环依赖关系的类: class FirstClass { [Dependency] pub
如果我有 10 个依赖项我需要注入(inject)并且不想在构造函数中有 10 个参数,我应该使用哪种注入(inject)模式? public class SomeClass { privat
我在使用 Angular2 DI 时遇到了问题。我尝试将一个类注入(inject)另一个类,它引发了以下错误: 留言:"Cannot resolve all parameters for 'Produ
对依赖注入(inject)还很陌生,我想弄清楚这是否是一种反模式。 假设我有 3 个程序集: Foo.Shared - this has all the interfaces Foo.Users -
我正在尝试了解 Angular 14 的变化,尤其是 inject()我可以将模块注入(inject)功能的功能,我不需要为此创建特殊服务..但我想我弄错了。 我正在尝试创建一些静态函数来使用包 ng
希望这个问题不是太愚蠢,我试图掌握更高级的编程原理,因此试图习惯使用 Ninject 进行依赖注入(inject)。 因此,我的模型分为几个不同的 .dll 项目。一个项目定义了模型规范(接口(int
我最近一直在大量使用依赖注入(inject)、测试驱动开发和单元测试,并且开始喜欢上它。 我在类中使用构造函数依赖,这样我就可以为单元测试注入(inject)模拟依赖。 但是,当您实际需要生产环境中的
我有下面的代码来使用 Guice 进行依赖注入(inject)。第一个是使用构造函数注入(inject),而另一个是直接在字段上方添加 @Inject。这两种方式有什么区别吗? Guice官网似乎推荐
这个问题在这里已经有了答案: Angular2 Beta dependency injection (3 个答案) 关闭 7 年前。 我正在使用 angular2 测试版。并在使用 @Inject
有没有可能做这样的事情? (因为我尝试过,但没有成功): @Injectable() class A { constructor(private http: Http){ // <-- Injec
我很恼火必须通过 Constructor 传递管道对象,因为我想为业务实体或要传递的值保留构造函数参数。 所以我想通过 setter ,但只要这些 setter 没有被填充,我的包含依赖项的对象就不应
假设我有这个: SomePage.razor: @inject Something something @page "/somepage" My Page @code { // Using
我是一名优秀的程序员,十分优秀!